正则表达式在Javascript中获取括号之间的字符串

     2023-02-22     57

关键词:

【中文标题】正则表达式在Javascript中获取括号之间的字符串【英文标题】:Regular Expression to get a string between parentheses in Javascript 【发布时间】:2013-07-20 17:25:02 【问题描述】:

我正在尝试编写一个正则表达式,它返回一个括号之间的字符串。例如:我想获取位于字符串“(”和“)”之间的字符串

I expect five hundred dollars ($500).

会回来

$500

找到Regular Expression to get a string between two strings in Javascript

但我是正则表达式的新手。我不知道如何在正则表达式中使用 '(', ')'

【问题讨论】:

Regular Expression to find a string included between two characters, while EXCLUDING the delimiters的可能重复 您可以使用下面的 go-oleg 解决方案,稍作修改以测试美元符号:var regExp = /\(\$([^)]+)\)/; 很高兴看到你到目前为止所做的尝试。 【参考方案1】:

您需要创建一组转义(带有\)括号(与括号匹配)和一组常规括号来创建您的捕获组:

var regExp = /\(([^)]+)\)/;
var matches = regExp.exec("I expect five hundred dollars ($500).");

//matches[1] contains the value between the parentheses
console.log(matches[1]);

细分:

\( :匹配左括号 ( : 开始捕获组 [^)]+:匹配一个或多个非)字符 ) : 结束捕获组 \) : 匹配右括号

这是RegExplained的视觉解释

【讨论】:

+1 很好,工作就像一个魅力。我想加你把这个tinyurl.com/mog7lr3添加到你的视觉解释中。 如果您要捕获的括号内有括号,这将不起作用。如:“我预计五百美元(500 美元(但我知道我再也见不到那笔钱了))。” 此正则表达式仅在每个字符串匹配一个实例时才有效。使用全局 /g 标志不会按预期工作。 @IanWarburton,matches[0] 为您提供匹配 '($500)' 的完整字符串,而 matches[1] 为您提供捕获组中的内容。这是有关 regExp.match() 的返回值的更多信息。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 如果括号内有多个字符串,解决方案是什么,如下所示:“我期望(五)百美元(500 美元)”假设我想要一个包含这些特殊字符串的数组。【参考方案2】:

尝试字符串操作:

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) 
    console.log(newTxt[i].split(')')[0]);

或正则表达式(有点像slow compare to the above

var txt = "I expect five hundred dollars ($500). and new brackets ($600)";
var regExp = /\(([^)]+)\)/g;
var matches = txt.match(regExp);
for (var i = 0; i < matches.length; i++) 
    var str = matches[i];
    console.log(str.substring(1, str.length - 1));

【讨论】:

今天在 Chrome 59.0.3071 中运行那个 jsperf,正则表达式快了 8%【参考方案3】:

简单的解决方案

注意:此解决方案可用于仅具有单个“(”和“)”的字符串,如本题中的字符串。

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();

Online demo (jsfiddle)

【讨论】:

【参考方案4】:

要匹配括号内的子字符串,不包括您可能使用的任何内括号

\(([^()]*)\)

模式。见the regex demo

在 JavaScript 中,像这样使用它

var rx = /\(([^()]*)\)/g;

模式详情

\( - 一个 ( 字符 ([^()]*) - 捕获组 1:negated character class 匹配除 () 之外的任何 0 个或多个字符 \) - ) 字符。

要获取整个匹配,请获取第 0 组的值,如果需要括号内的文本,请获取第 1 组的值。

最新的 JavaScript 代码演示(使用 matchAll):

const strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
const rx = /\(([^()]*)\)/g;
strs.forEach(x => 
  const matches = [...x.matchAll(rx)];
  console.log( Array.from(matches, m => m[0]) ); // All full match values
  console.log( Array.from(matches, m => m[1]) ); // All Group 1 values
);

旧版 JavaScript 代码演示(符合 ES5):

var strs = ["I expect five hundred dollars ($500).", "I expect.. :( five hundred dollars ($500)."];
var rx = /\(([^()]*)\)/g;


for (var i=0;i<strs.length;i++) 
  console.log(strs[i]);

  // Grab Group 1 values:
  var res=[], m;
  while(m=rx.exec(strs[i])) 
    res.push(m[1]);
  
  console.log("Group 1: ", res);

  // Grab whole values
  console.log("Whole matches: ", strs[i].match(rx));

【讨论】:

这个正则表达式非常棒,因为它只捕获一对 () 及其内容,即使并排()() @limitlessloop 因为这似乎是一个有用的答案,我还添加了一个新的基于 matchAll 的 JavaScript 代码演示。 这个答案是最好的。 如何包含括号,你也可以举个例子吗? @postgresnewbie 它已经在那里了,console.log( Array.from(matches, m =&gt; m[0]) ); // All full match values。那你就不需要组了,可以使用var rx = /\([^()]*\)/g;【参考方案5】:

将Mr_Green's answer 移植到函数式编程风格以避免使用临时全局变量。

var matches = string2.split('[')
  .filter(function(v) return v.indexOf(']') > -1)
  .map( function(value)  
    return value.split(']')[0]
  )

【讨论】:

我在寻找什么。 ***.com/questions/49614116/…【参考方案6】:

对于货币符号后的数字:\(.+\s*\d+\s*\) 应该可以工作

\(.+\) 括号内的任何内容

【讨论】:

这将适用于示例文本,但是如果另一个) 出现在字符串后面,如I expect five hundred dollars ($500). (but I'm going to pay).+ 的贪婪将捕获更多。 @Denomales 那么你如何让它捕获这些字符串的两个实例。理想情况下,我正在做类似的事情,但我希望:($500)(but I'm going to pay) 匹配但在两个单独的匹配中而不是被视为单个匹配项?提前致谢! (.+) 满足我的要求。需要捕获诸如“Dunhill(瓶/包/罐/镜头)”之类的东西并返回“Dunhill”【参考方案7】:

替代方案:

var str = "I expect five hundred dollars ($500) ($1).";
str.match(/\(.*?\)/g).map(x => x.replace(/[()]/g, ""));
→ (2) ["$500", "$1"]

如果需要,可以用方括号或大括号替换括号

【讨论】:

str 没有括号时,这会被破坏【参考方案8】:

let str = "Before brackets (Inside brackets) After brackets".replace(/.*\(|\).*/g, '');
console.log(str) // Inside brackets

【讨论】:

【参考方案9】:
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));

将匹配以 $ 开头并后跟 ')' 的第一个数字。 ')' 不会成为匹配的一部分。代码会在第一个匹配项时发出警报。

var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/g;
var matches = str.match(rex);
for (var i = 0; i < matches.length; i++)

    alert(matches[i]);

此代码会在所有匹配项时发出警报。

参考资料:

搜索“?=n” http://www.w3schools.com/jsref/jsref_obj_regexp.asp

搜索“x(?=y)” https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp

【讨论】:

【参考方案10】:

简单: (?&lt;value&gt;(?&lt;=\().*(?=\)))

希望我能帮上忙。

【讨论】:

正则表达式获取方括号之间的文本,包括差异?

...】:2014-07-3104:07:07【问题描述】:我需要找到一个在C#(JavaScript也是)中使用的正则表达式,以获取方括号组合内的文本。我尝试了几种方法,但我放弃了,我的组合总是有一些错误,有人可以帮助我吗?[text][[te 查看详情

正则表达式获取花括号之间的字符串

】正则表达式获取花括号之间的字符串【英文标题】:Regextogetstringbetweencurlybraces【发布时间】:2010-09-2914:37:50【问题描述】:不幸的是,尽管我在记忆中已经尝试每年至少学习一次正则表达式,但我总是忘记,因为我很少使用... 查看详情

QT正则表达式获取括号之间的内容

】QT正则表达式获取括号之间的内容【英文标题】:QTRegularExpressiongettingcontentsbetweenbrackets【发布时间】:2016-04-1111:36:37【问题描述】:我想拆分一个表达式来获取括号中的内容:例如。表达式可能如下所示:(center:SCREEN)-(25%:SCREEN... 查看详情

在 javascript 中使用正则表达式从内到外获取 pharanteses 之间的全部内容

】在javascript中使用正则表达式从内到外获取pharanteses之间的全部内容【英文标题】:Getentirecontentbetweenpharantesesusingregexfromtheinsidetooutinjavascript【发布时间】:2021-10-2404:46:37【问题描述】:例子varstr="%function1(%function2(%function2(content)... 查看详情

如何在嵌套括号之间获取文本?

...11-1016:44:40【问题描述】:用于获取括号()之间文本的正则表达式,我已经尝试过,但我没有得到正则表达式。对于这个例子Regex.Match(script,@"\\((.*?)\\)").Value例子:-add(mul(a,add(b,c)),d)+e-sub(f, 查看详情

学习正则表达式

RegExp对象RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具。正则可视化的网页:https://regexper.com/.学习正则要像背书一样记住一些字符的含义。方括号,元字符,量词.然后就剩下RegExp对象本身的一些属性和方法... 查看详情

JavaScript 正则表达式:删除括号、方括号和西里尔字符之间的文本

】JavaScript正则表达式:删除括号、方括号和西里尔字符之间的文本【英文标题】:JavaScriptRegex:Removetextbetweenparentheses,bracketsandcyrilliccharacter【发布时间】:2021-09-2504:13:59【问题描述】:能改吗(Test1/Test2)[Test3]Отдел/Hereistitle-subtit... 查看详情

在 C# 正则表达式中检索括号之间的字符串

】在C#正则表达式中检索括号之间的字符串【英文标题】:RetrievestringbetweenparathesisinC#Regex【发布时间】:2017-09-2808:30:43【问题描述】:我想知道是否可以突出显示anystring之间的字符串这是我尝试过的。^(.*)$这可行,但这种情况下... 查看详情

javascript正则表达式中中括号的“坑”

在javascript中使用正则时需要注意中括号里边的一个坑,那就是中括号内的元字符问题。自己踩到坑了,网上搜了一下还有不少人踩了这个坑,所以大概说一下。中括号在正则中称为字符组(Characterclass),有的书翻译为字符类,还... 查看详情

正则表达式在方括号之间抓取字符串

】正则表达式在方括号之间抓取字符串【英文标题】:Regextograbstringsbetweensquarebrackets【发布时间】:2011-11-0407:25:48【问题描述】:我有以下字符串:pass[1][2011-08-21][total_passes]如何将方括号之间的项目提取到数组中?我试过了match(... 查看详情

js正则表达式

...行多行匹配。方括号方括号用于查找某个范围内的字符:表达式描述[abc]查找方括号之间的任何字符。[^abc]查找任何不在方括号之间的字符。[0-9]查找任何从0至9的数字。[a-z]查找任何从小写a到小写z的字符。[A-Z]查找任何从大写A... 查看详情

javascript正则表达式通俗解释快速记忆

1、正则表达式中最重要的三个符号:1.1B在正则表达式中B有3种类型的括号:1.1.1方括号“[“。方括号"["内是需要匹配的字符。中括号括住的内容只匹配一个单一的字符。^[ab]$  1.1.2花括号"{"花括号"{"内是指定匹配字符的数... 查看详情

正则表达式,获取“?”之间的所有数据

...数组、对象或4个不同字符串中的正则表达式或函数。在javascript中。找到/\\ 查看详情

几个方便的正则表达式

  用正则表达式,去除无效字符非常简单。让我们看一个例子  conststr="https://en.wikipedia.org/"  str.replace(/[<>|:"*?\/]+/g,‘‘)  //=>"httpsen.wikipedia.org"  []称为字符类,JS会把字符串与方括号之间的字符之一匹配,在配... 查看详情

正则表达式匹配括号之间的内容

】正则表达式匹配括号之间的内容【英文标题】:RegExtomatchstuffbetweenparentheses【发布时间】:2011-09-0616:38:00【问题描述】:我很难让它发挥作用。我有一个像这样的字符串:something/([0-9])/([a-z])我需要正则表达式或获取括号之间的... 查看详情

获取花括号之间的值c#

...】:2013-06-2702:22:46【问题描述】:我以前从未使用过正则表达式。我很高兴在论坛中看到类似的问题,但不完全是我要找的问题我有一个如下字符串。需要获取大括号之间的值例如:“namename@gmail.com”我需要得到以下拆分的字符... 查看详情

正则表达式提取大括号之间的数据并加载到 AMQ

】正则表达式提取大括号之间的数据并加载到AMQ【英文标题】:RegexExpressiontoextractdatabetweenbracesandloadintoAMQ【发布时间】:2018-09-2122:58:43【问题描述】:我正在开发一个WinForm,C#。我在日志文件中有一个数据。我已将该数据加载... 查看详情

java示例代码_使用java正则表达式在括号之间搜索文本

java示例代码_使用java正则表达式在括号之间搜索文本 查看详情