此正则表达式/({{(?!{*textdata.*)#\s*.[\w\.]+\.*}})/gm
在chrome上使用regexp只给我两场比赛(期待4)。当我在http://www.regexr.com/上使用相同的表达式时,我会获得正确数量的匹配。
有没有人知道可能会发生什么?
var passingString = '{{#something}}{{#something}} I THIS What {{#something}}{{#something}} \n asdasdas {{/something}}';
var test = /({{(?!{*textdata.*)#\s*.[\w\.]+\.*}})/gm.exec(passingString)
console.debug(test.length);
答案 0 :(得分:3)
exec
.vs match
:exec一次只生成一个结果,需要连续的exec()调用,直到它生成null。另一方面,匹配同时查找所有匹配项。
如果你运行它,你会得到四个结果:
var passingString = '{{#something}} I HONESTLY CANNOT BELIEVE THIS SHIT {{#something}} I HONESTLY CANNOT BELIEVE THIS SHIT {{#something}}{{#something}} \n asdasdas {{/something}}';
passingString.match(/({{(?!{*textdata.*)#\s*.[\w\.]+\.*}})/gm)
结果:
Array [ "{{#something}}", "{{#something}}", "{{#something}}", "{{#something}}" ]
如果您仍然需要exec
,则需要将其作为while循环运行,并在不再生成任何内容时终止:
var arr;
while (arr = regex.exec(passingString)) {
console.log(arr);
}
这将找到四个条目,然后突破循环。
答案 1 :(得分:1)
您可能需要match
:
passingString.match(/({{(?!{*textdata.*)#\s*.[\w\.]+\.*}})/gm)
返回
["{{#something}}", "{{#something}}", "{{#something}}", "{{#something}}"]
虽然exec
一次只匹配一个(并且长度是由子匹配引起的)。