Javascript Regex仅匹配2项,当我期待4

时间:2015-02-27 18:13:11

标签: javascript regex

此正则表达式/({{(?!{*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);

2 个答案:

答案 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一次只匹配一个(并且长度是由子匹配引起的)。