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

跃然一笑
TA贡献1826条经验 获得超6个赞
表则表达式/(\d)(?=(\d{3})+\.)/g
不是只能匹配一次前面的12000000000吗?
先解答题主最关心的问题,这里出现多次匹配,出现是/g
修饰符的作用,来直接看下/g
的解释:/g
修饰符代表全局匹配,查找所有匹配而非在找到第一个匹配后停止。
然后分解下正则表达式各段的意思,把表达式分为三部分
(\d)
- 匹配左边是一个数字且捕获,标记为1(\d{3})+\.
- 以.
符号结尾的,并且3个连续的数字为组,多次重复且尽可能多的匹配到(贪婪模式),且至少匹配中连续的3个连续数字1次以上,且捕获,标记为2(?=regexp)
-(?=)
表示零宽度正预测先行断言,断言自身出现的位置的后面能匹配表达式。结合1)和2)就是说:我只想匹配一个任意的数字(称为目标数字),但我希望这个数字串的末尾是以.
号结尾的,并且希望这个目标数字和.
之间的部分是任意数量的3个数字成对出现的。

蝴蝶不菲
TA贡献1810条经验 获得超4个赞
不是很理解你哪里不理解,说下这个正则吧。
这个正则/(\d)(?=(\d{3})+\.)/
的意思是捕获.
前面的3的倍数个数字前面的1个数字。
你的疑惑可能是因为没有看清楚(\d{3})+
里面的+
吧。

拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
模式修饰符/g会找到所有可匹配的。
/(\d)(?=(\d{3})+\.)/g
整个表达式的含义:匹配一个数,其后跟着3*n个数加"."。(n是正整数)
添加回答
举报
0/150
提交
取消