javascript - 为什么这个 RegExp exec 会导致无限循环?

标签 javascript regex

我有以下代码块:

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/

相关文章:

javascript - 在单独的 Div Jquery 中的倒数计时器时钟

javascript - HTML 表单 - 需要用户能够从下拉列表中选择一个选项,然后在另一个字段中输入数字吗?

javascript - Kendo 日期选择器不可编辑

javascript - 为什么以下文件扩展名正则表达式不匹配?

C++11 正则表达式抛出 std::regex_error

javascript - 为什么 'abc' .split(/(a|b|c)/) 在 Javascript 中给出 a、b、c 和空字符串?

javascript - 使用 jquery 追加除特定类之外的 HTML

php - 检测字符串是否包含 html yii2

python - 如何改进正则表达式来提取电话号码?

javascript - 比较 html 标签内变量的正则表达式