javascript - 为什么这个正则表达式的第二部分不匹配?
问题描述
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
作为捕获组?
解决方案
这是因为字符串12
在第一次运行时匹配exec
,捕获的括号2
是附加到results
变量和对象的lastIndex
属性re
更新为2
在第二次运行中,exec
这意味着在索引处开始匹配源字符串,因此具有明显与模式不匹配的字符串并且 exec 返回,而退出循环并且数组只包含re.lastIndex
2
2
re
3
/\d(\d)/
null
results
2
推荐阅读
- android - 单个商家有多个产品,我们需要使用 XMPP ejabberd 连接为每个产品单独的聊天选项
- java - Itext:在页面底部添加文本,如果页面已满,则将其添加到新页面底部
- angular - Angular ngFor中的组件@Input
- python-3.x - subprocess.Popen 挂起主应用程序
- wcf - Service Fabric - 本地集群 - 排队
- node.js - 节点 JS 路由请求
- c# - 调用列表
在c#中将button1单击事件转换为button2单击事件 - javascript - 如何在 Facebook for Developers 下的测试页面上下载测试应用程序?
- javascript - 字符串不能转换为辅助功能委托辅助功能角色
- sql - 如何在sql server中获取月份(字符串)差异