我正在尝试编写一个正则表达式,它返回括号之间的字符串。例如:我想获得字符串“(”和“)”
之间的字符串I expect five hundred dollars ($500).
将返回
$500
找到Regular Expression to get a string between two strings in Javascript
但我是正则表达式的新手。我不知道如何在regexp中使用'(',')'
答案 0 :(得分:391)
您需要创建一组转义(带\
)个括号(与括号匹配)和一组创建捕获组的常规括号:
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 :(得分:28)
尝试字符串操作:
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));
}
答案 2 :(得分:8)
将Mr_Green's answer移植到函数式编程样式以避免使用临时全局变量。
var matches = string2.split('[')
.filter(function(v){ return v.indexOf(']') > -1})
.map( function(value) {
return value.split(']')[0]
})
答案 3 :(得分:3)
仅适用于货币符号后的数字:\(.+\s*\d+\s*\)
应该有效
或\(.+\)
括号内的任何内容
答案 4 :(得分:3)
简单解决方案
注意:此解决方案用于仅包含单个&#34;(&#34;和&#34;)&#34;像这个问题中的字符串一样。
("I expect five hundred dollars ($500).").match(/\((.*)\)/).pop();
答案 5 :(得分:3)
替代:
var str = "I expect five hundred dollars ($500) ($1).";
str.match(/\(.*?\)/g).map(x => x.replace(/[()]/g, ""));
→ (2) ["$500", "$1"]
如果需要,可以将方括号替换为方括号或大括号
答案 6 :(得分:2)
要匹配括号内的子字符串(不包括您可能使用的任何内部括号)
\(([^()]*)\)
模式。参见the regex demo。
在JavaScript中,请像使用
var rx = /\(([^()]*)\)/g;
模式详细信息
\(
-一个(
字符([^()]*)
-捕获组1:与(
和)
之外的0个或更多字符匹配的negated character class \)
-一个)
字符。要获得全部匹配,请获取组0值,如果需要括号内的文本,请获取组1值:
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));
}
答案 7 :(得分:1)
let str = "Before brackets (Inside brackets) After brackets".replace(/.*\(|\).*/g, '');
console.log(str) // Inside brackets
答案 8 :(得分:1)
简单:
(?<value>(?<=\().*(?=\)))
希望我有所帮助。
答案 9 :(得分:0)
var str = "I expect five hundred dollars ($500) ($1).";
var rex = /\$\d+(?=\))/;
alert(rex.exec(str));
将匹配以$开头的第一个数字,然后是&#39;)&#39;。 &#39;)&#39;不会参加比赛。代码会在第一场比赛时发出警报。
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]);
}
此代码会提醒所有匹配。
参考文献:
搜索&#34;?= n&#34; http://www.w3schools.com/jsref/jsref_obj_regexp.asp
搜索&#34; x(?= y)&#34; https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp