RegExp.exec不返回全局结果

时间:2010-10-13 00:33:56

标签: javascript regex exec

根据MDC https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec,以下代码应记录此正则表达式的每个全局匹配项。

var str = "(^|\\+)(1\\+1)($|\\+)";
var regex = new RegExp(str, "g");
var result;
var testString = "1+1+1";
while ((result = regex.exec(testString)) != null)
{
    console.log(result);
}

但我得到的只是第一场比赛然后循环结束。任何想法为什么。

2 个答案:

答案 0 :(得分:0)

只有一场比赛,因为不允许重叠。比赛是:

(^|\\+) - ^

(1\\+1) - 1+1

($|\\+) - +

应该很清楚,不能有其他匹配,因为每场比赛至少需要1+1,并且只剩下一个。另外,使用正则表达式文字更简单:

var regex = /(^|\+)(1\+1)($|\+)/g;

答案 1 :(得分:0)

由于匹配不能重叠,因此您的正则表达式将不会多次匹配该字符串。你有另一个你想要匹配的样本字符串,或者你需要从字符串中获得更多细节吗?

无论如何,我会使用RegExp对象文字;减少转义,你可以直接指定全局标志。

var regex = /(^|\+)(1\+1)($|\+)/g;