对正则表达式量词的理解
function regTest (reg, raw) {
console.log(`${raw} => ${reg.test(raw)}`)
}
regTest(/((\d)\d\1){2}/, '31312');
regTest(/((\d)\d\1){3}/, '31313');
输出结果:
31312 => true
31313 => false
怎么理解第一次调用返回true,
第一次返回true,好理解,有两次匹配,313、131
第二次返回false,我的理解有三个匹配的313、131、313 ,为什么不返回true?
这里理解错了,实际上\1表示的是(\d)\d)而不是(\d),捕获分组时,按照括号出现的顺序从左到右标记,
这样就能理解了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
第一个的{2}表示前面括号里的匹配出现2次, 所以第一个true.
第二个的{3}表示前面括号里的匹配出现3次, 所以第二个是false.
我觉得此处的写法是有问题的,正常的1是匹配第一个括号的,然而第一个括号是1的外层,所以1返回的为空字符串,因而匹配31312的时候实际上循环的是
\d1
这个东西,循环两次因而返回true
,第二个循环三次,但是字符串中不足,因而就返回false