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

Okk*_*kky 154 javascript regex string

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

I expect five hundred dollars ($500).
Run Code Online (Sandbox Code Playgroud)

会回来的

$500
Run Code Online (Sandbox Code Playgroud)

找到正则表达式以在Javascript中获取两个字符串之间的字符串

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

go-*_*leg 411

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

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

//matches[1] contains the value between the parentheses
console.log(matches[1]);
Run Code Online (Sandbox Code Playgroud)

分解:

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

这是RegExplained的直观解释

  • +1很好,工作就像一个魅力.我想添加您的http://tinyurl.com/mog7lr3添加到您的视觉解释中. (12认同)
  • @ user1671639:已更新.谢谢你的链接! (5认同)
  • 如果要捕获的括号中有括号,则此方法无效.如:"我期待五百美元(500美元(但我知道我再也见不到钱)." (5认同)
  • 此正则表达式仅在每个 sting 匹配一个实例时才有效。使用全局 `/g` 标志不会按预期工作。 (4认同)
  • @IanWarburton,matches[0] 为您提供与 '($500)' 匹配的完整字符串,而matches[1] 仅提供捕获组中的内容。以下是有关 regExp.match() 返回值的更多信息。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec (2认同)
  • 如果您在括号内有多个字符串,例如:“我希望(五)百美元(500美元)”,那该怎么办呢?假设我想要这些特殊字符串的数组。 (2认同)

Mr_*_*een 31

尝试字符串操作:

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]);
}
Run Code Online (Sandbox Code Playgroud)

或正则表达式(与上述相比有点)

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));
}
Run Code Online (Sandbox Code Playgroud)

  • 今天在Chrome 59.0.3071中运行jsperf,正则表达式提高了8% (7认同)

Wik*_*żew 10

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

\(([^()]*)\)
Run Code Online (Sandbox Code Playgroud)

图案。见正则表达式演示

在 JavaScript 中,像这样使用它

var rx = /\(([^()]*)\)/g;
Run Code Online (Sandbox Code Playgroud)

图案详情

  • \(- 一个(字符
  • ([^()]*)- 捕获组 1:匹配除and之外的任何 0 个或多个字符的否定字符类()
  • \)- 一个)字符。

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

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

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

var rx = /\(([^()]*)\)/g;
Run Code Online (Sandbox Code Playgroud)

  • 这个正则表达式很棒,因为它只捕获成对的“()”及其内容,即使并排的“()()”也是如此。 (2认同)
  • @limitlessloop 因为这似乎是一个有用的答案,所以我还添加了一个新的基于“matchAll”的 JavaScript 代码演示。 (2认同)

sil*_*min 9

移植Mr_Green对函数式编程风格的回答,以避免使用临时全局变量.

var matches = string2.split('[')
  .filter(function(v){ return v.indexOf(']') > -1})
  .map( function(value) { 
    return value.split(']')[0]
  })
Run Code Online (Sandbox Code Playgroud)


mar*_*iso 8

选择:

\n\n
var str = "I expect five hundred dollars ($500) ($1).";\nstr.match(/\\(.*?\\)/g).map(x => x.replace(/[()]/g, ""));\n
Run Code Online (Sandbox Code Playgroud)\n\n
\xe2\x86\x92 (2)\xc2\xa0["$500", "$1"]\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n


P0W*_*P0W 5

对于货币符号后的数字:\(.+\s*\d+\s*\)应该有效

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

  • 这将适用于示例文本,但是,如果稍后在字符串中出现另一个`)`之类的话,我希望五百美元($ 500)。(但我要付钱)。`+的贪婪将带来更多收益。 (2认同)

Ali*_*ani 5

简单的解决方案

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

("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
Run Code Online (Sandbox Code Playgroud)

在线演示(jsfiddle)

  • 如果匹配不存在,则添加可选链接将返回未定义,而不是导致未捕获的异常(“我预计五百美元($500)。”).match(/\((.*)\)/)?.pop(); (2认同)