我试图写一个正则表达式,它返回一个字符串是括号之间。例如:我想获得位于字符串"("和")"之间的字符串

I expect five hundred dollars ($500).

将返回

$500

发现正则表达式在Javascript中获得两个字符串之间的字符串

我不知道如何在regexp中使用'(',')'。


当前回答

选择:

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

如果需要,可以用方括号或花括号代替方括号

其他回答

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

var regExp = /\(([^)]+)\)/; var matches = regExp。exec(“我期望500美元。”); //匹配[1]包含括号之间的值 console.log(匹配[1]);

分解:

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

下面是RegExplained上的一个可视化解释

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

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

简单的解决方案

注意:这个解决方案可以用于这个问题中只有一个“(”和“)”的字符串。

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

在线演示(jsfiddle)

将Mr_Green的答案移植为函数式编程风格,以避免使用临时全局变量。

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

简单: (? <价值 >(?<=\().*(?=\)))

我希望我能帮上忙。