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

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

I expect five hundred dollars ($500).

将返回

$500

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

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

515104 次浏览

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

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的一个可视化解释

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

\(.+\)用于括号内的任何东西

尝试字符串操作:

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]);
}

或regex (这有点慢于上面)

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));
}
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 < / p >

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

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

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

简单的解决方案

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

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

在线演示(jsfiddle)

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

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

模式。看到正则表达式演示

在JavaScript中,使用它像

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

模式的细节

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

要获得整个匹配,获取Group 0值,如果需要括号内的文本,则获取Group 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));
}

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

选择:

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

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

< p >简单: (?<value>(?<=\().*(?=\))) < / p >

我希望我能帮上忙。