整数从右到左正则匹配-隔三个加一个逗号

  我自己开始的时候,写的以下代码,但是不行

'43123456789'.replace( /((\d{3})+)$/g, ',$1' )   ---代码2  //"43,123456789"
'43123456789'.replace( /((\d{3})+)$/g, ',$1=$2' )   ---代码3  //"43,123456789=789"

  代码2中,开始一直没有明白为什么有问题,现在理解了。代码2的正则是:全局匹配(多个3个数字+结束行)。匹配从第一个数字开始,index为0,发现不匹配,然后index后移一位到1,发现也不是结尾前为3个3个的数字,然后继续后移一位到2,进行贪婪匹配,直接匹配到了结尾处,所以外层括号匹配的是123456789,即$1是123456789。然后index移到最末尾了,全局没有用了。所以加不加g,这里都是一样的。

  从代码3中,看到$2是789,我很好奇为嘛不是123呢。通过猜测感觉是里面的小括号在匹配的过程中会被覆盖。虽然是加号,但是只有一个括号,执行+号的时候,括号的内容一直更新

'43123456789'.replace( /\B(?=(\d{3})+$)/g, ',' ) ---代码1

  

  如上图,红线代表空隙。代码1中的正则/\B(?=(\d{3})+$)/g:\B是匹配的是非单词边界的空格;?=是非获取性的匹配;\B(?=(\d{3})+$)这个匹配的是一个后面有多个3个数字的空隙(非获取性匹配)。

  空隙1匹配不上,移到空隙2,后面的数字的个数也不是3的倍数,移到3,匹配上了,全局匹配继续,4,5过,6匹配上,7、8过,空隙9匹配上,10、11、12都过,所以代码1就能实现啦

转载于:https://www.cnblogs.com/molinglan/p/8746189.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值