我有以下代码块:
var field,
reg = new RegExp('{{.*?}}', 'i'),
text = 'This is a string with 1: {{param1}}, 2: {{param2}} and 3: {{param3}} parameters.';
while (field = reg.exec(text)) {
console.log(field);
}
如果我包含一个 g
全局标志,循环运行良好。但是,如果它不是全局的,reg.exec(text);
是否应该在第一次匹配后返回 null
并结束 while
循环?
试图了解其背后的原因,如果有人能详细说明,我将不胜感激。
最佳答案
RegExp.prototype.exec() 的 MDN 文档在解释 RegExp 对象的 lastIndex
属性的值时,有我认为的答案:
The index at which to start the next match. When "g" is absent, this will remain as 0.
因此,每次您对该 RegExp 对象调用 .exec()
时,它都会再次从字符串的开头 开始。如果至少有一个匹配项,则意味着它将始终找到一个匹配项,并且您的循环将永远不会结束。
关于javascript - 为什么这个 RegExp exec 会导致无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969913/