这种正则怎么匹配的?

clipboard.png

这个正则后面那个(?=(\d{3}+\.))
不是只能匹配一次前面的12000000000吗?
为什么还能继续匹配前面的?
前面那些不是没有.吗,怎么就符合了?

阅读 2k
3 个回答

表则表达式/(\d)(?=(\d{3})+\.)/g

不是只能匹配一次前面的12000000000吗?

先解答题主最关心的问题,这里出现多次匹配,出现是/g修饰符的作用,来直接看下/g的解释:/g修饰符代表全局匹配,查找所有匹配而非在找到第一个匹配后停止

然后分解下正则表达式各段的意思,把表达式分为三部分

  1. (\d) - 匹配左边是一个数字且捕获,标记为1
  2. (\d{3})+\. - 以.符号结尾的,并且3个连续的数字为组,多次重复且尽可能多的匹配到(贪婪模式),且至少匹配中连续的3个连续数字1次以上,且捕获,标记为2
  3. (?=regexp) - (?=)表示零宽度正预测先行断言,断言自身出现的位置的后面能匹配表达式。结合1)和2)就是说:我只想匹配一个任意的数字(称为目标数字),但我希望这个数字串的末尾是以.号结尾的,并且希望这个目标数字和.之间的部分是任意数量的3个数字成对出现的。

不是很理解你哪里不理解,说下这个正则吧。
这个正则/(\d)(?=(\d{3})+\.)/的意思是捕获.前面的3的倍数个数字前面的1个数字。
你的疑惑可能是因为没有看清楚(\d{3})+里面的+吧。

模式修饰符/g会找到所有可匹配的。

/(\d)(?=(\d{3})+\.)/g
整个表达式的含义:匹配一个数,其后跟着3*n个数加"."。(n是正整数)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题