对正则表达式量词的理解

发布于 2022-09-06 04:08:09 字数 412 浏览 17 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

扬花落满肩 2022-09-13 04:08:09

第一个的{2}表示前面括号里的匹配出现2次, 所以第一个true.
第二个的{3}表示前面括号里的匹配出现3次, 所以第二个是false.

梦亿 2022-09-13 04:08:09

我觉得此处的写法是有问题的,正常的1是匹配第一个括号的,然而第一个括号是1的外层,所以1返回的为空字符串,因而匹配31312的时候实际上循环的是 \d1 这个东西,循环两次因而返回true,第二个循环三次,但是字符串中不足,因而就返回false

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文