根据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);
}
但我得到的只是第一场比赛然后循环结束。任何想法为什么。
答案 0 :(得分:0)
只有一场比赛,因为不允许重叠。比赛是:
(^|\\+) - ^
(1\\+1) - 1+1
($|\\+) - +
应该很清楚,不能有其他匹配,因为每场比赛至少需要1+1
,并且只剩下一个。另外,使用正则表达式文字更简单:
var regex = /(^|\+)(1\+1)($|\+)/g;
答案 1 :(得分:0)
由于匹配不能重叠,因此您的正则表达式将不会多次匹配该字符串。你有另一个你想要匹配的样本字符串,或者你需要从字符串中获得更多细节吗?
无论如何,我会使用RegExp对象文字;减少转义,你可以直接指定全局标志。
var regex = /(^|\+)(1\+1)($|\+)/g;