首页 > 解决方案 > 为什么这个正则表达式的第二部分不匹配?

问题描述

var re = /\d(\d)/g;
var str = '123';
var match;
var results = [];

while (match = re.exec(str)) {
  results.push(+match[1]);
}
console.log(results);

而不是[2, 3]我所期望的,它只给出了[2]我无法解决的问题。为什么不23匹配正则表达式并将其3作为捕获组?

标签: javascriptregex

解决方案


这是因为字符串12在第一次运行时匹配exec,捕获的括号2是附加到results变量和对象的lastIndex属性re更新为2

在第二次运行中,exec这意味着在索引处开始匹配源字符串,因此具有明显与模式不匹配的字符串并且 exec 返回,而退出循环并且数组只包含re.lastIndex22re3/\d(\d)/nullresults2


推荐阅读