2

我有一个大字符串,我想从中提取圆括号内的所有部分。

说我有一个字符串

“这个(一)那个(一二)是(三)”

我需要编写一个返回数组的函数

["one", "one two", "three "]

我试图从这里找到的一些建议中编写一个正则表达式但失败了,因为我似乎只得到第一个元素而不是一个正确的数组,其中包含所有这些元素:http: //jsfiddle.net/gfQzK/

var match = s.match(/\(([^)]+)\)/);
alert(match[1]);

有人能指出我正确的方向吗?我的解决方案不必是正则表达式。

4

3 回答 3

4

你需要一个全局正则表达式。看看这是否有帮助:

var matches = [];
str.replace(/\(([^)]+)\)/g, function(_,m){ matches.push(m) });

console.log(matches); //= ["one", "one two", "three "]

match不会这样做,因为它不会捕获全局正则表达式中的组。replace可以用来循环。

于 2013-06-25T08:17:20.717 回答
3

你快到了。你只需要改变一些事情。
首先,将全局属性添加到您的正则表达式。现在您的正则表达式应如下所示:

/\(([^)]+)\)/g

然后,match.length将为您提供匹配的数量。要提取匹配项,请使用诸如match[1] match[2] match[3]...

于 2013-06-25T08:17:12.397 回答
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);

小提琴


如需参考,请查看此mdn 文章exec

于 2013-06-25T08:23:56.927 回答