我有一个大字符串,我想从中提取圆括号内的所有部分。
说我有一个像
这样的字符串“这(一)那(一二)是(三)”
我需要编写一个返回数组的函数
["one", "one two", "three "]
我试图从这里找到的一些建议写一个正则表达式并且失败了,因为我似乎只得到第一个元素而不是一个充满所有这些元素的正确数组:http://jsfiddle.net/gfQzK/
var match = s.match(/\(([^)]+)\)/);
alert(match[1]);
有人能指出我正确的方向吗?我的解决方案不一定是正则表达式。
答案 0 :(得分:4)
你需要一个全局正则表达式。看看这是否有帮助:
var matches = [];
str.replace(/\(([^)]+)\)/g, function(_,m){ matches.push(m) });
console.log(matches); //= ["one", "one two", "three "]
match
不会这样做,因为它不会捕获全局正则表达式中的组。 replace
可用于循环。
答案 1 :(得分:3)
你快到了。你只需要改变一些事情 首先,将全局属性添加到正则表达式中。现在你的正则表达式看起来像:
/\(([^)]+)\)/g
然后,match.length
将为您提供匹配数量。要提取匹配项,请使用match[1]
match[2]
match[3]
等索引...
答案 2 :(得分:1)
你需要使用全局标志和多行,如果你有新行,并且不断exec
结果,直到你把所有结果都放在一个数组中:
var s='Russia ignored (demands) by the White House to intercept the N.S.A. leaker and return him to the United States, showing the two countries (still) have a (penchant) for that old rivalry from the Soviet era.';
var re = /\(([^)]+)\)/gm, arr = [], res = [];
while ((arr = re.exec(s)) !== null) {
res.push(arr[1]);
}
alert(res);
<强> fiddle 强>
如需参考,请查看此mdn article on exec