当i'I’我期待4岁

Javascript Regex matching only 2 items when i'm expecting 4

本文关键字:我期待 4岁      更新时间:2024-06-19

此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);

exec.vs match:exec一次只生成一个结果,需要连续调用exec(),直到生成null。另一方面,Match同时查找所有匹配项。

如果你运行这个,你会得到四个结果:

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);
}    

这将找到四个条目,然后脱离循环。

您可能想要match:

passingString.match(/({{(?!{*textdata.*)#'s*.['w'.]+'.*}})/gm)

返回

["{{#something}}", "{{#something}}", "{{#something}}", "{{#something}}"]

而CCD_ 6一次只进行一次匹配(并且长度是由于子匹配)。