我正在尝试编写一个正则表达式,该表达式返回括号之间的字符串。例如:我想获取位于字符串“(”和“)”之间的字符串
I expect five hundred dollars ($500).
会回来
$500
找到正则表达式以获取Javascript中两个字符串之间的字符串
但是我对regex并不陌生。我不知道如何在正则表达式中使用'(',')'
var regExp = /\(\$([^)]+)\)/;
我正在尝试编写一个正则表达式,该表达式返回括号之间的字符串。例如:我想获取位于字符串“(”和“)”之间的字符串
I expect five hundred dollars ($500).
会回来
$500
找到正则表达式以获取Javascript中两个字符串之间的字符串
但是我对regex并不陌生。我不知道如何在正则表达式中使用'(',')'
var regExp = /\(\$([^)]+)\)/;
Answers:
您需要创建一组转义的(带有\
)括号(与括号匹配)和一组常规的括号来创建捕获组:
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的直观说明
/g
标志将无法按预期工作。
尝试字符串操作:
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]);
}
或正则表达式(其被稍微慢比较上述)
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));
}
将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();
对于货币符号后的数字:\(.+\s*\d+\s*\)
应该有效
或\(.+\)
括号内的任何内容
)
字符串的后面出现另一个,例如I expect five hundred dollars ($500). (but I'm going to pay).
的贪婪性,+
则会捕获更多内容。
($500)
并且(but I'm going to pay)
被匹配,但要进行两次单独的匹配,而不是被视为单个匹配项?提前致谢!
要匹配括号内的子字符串(不包括任何内部括号),可以使用
\(([^()]*)\)
模式。见的正则表达式演示。
在JavaScript中,像
var rx = /\(([^()]*)\)/g;
图案细节
\(
-一个(
字符([^()]*)
-捕获组1:与除和之外的任何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):
()
即使在并排时也仅捕获对及其内容()()
。
matchAll
基于JavaScript的代码演示。
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