正则表达式 - 正则:将一串数字的每3个就用逗号分开的问题

查看:703
本文介绍了正则表达式 - 正则:将一串数字的每3个就用逗号分开的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

'12334565632'.replace(/(\d)(?=(\d{3})+$)/g, "$1,");
//结果:"12,334,565,632"

上边这个是网上找的,是可以实现的,但是和我理解的不一样,我说下我是怎么想的,大家帮我指正下,谢谢。
1.(?=(\d{3})+$)/g 这里用了一个零宽断言,我认为(\d{3})后边这个+是说出现1次或更多次的意思,那么如果我将前边的字符串换成'2'的时候我发现也匹配成功了,按理说他没有匹配到3个数字啊!为什么还是成功了呢??

2.这个$1匹配的应该是表达式(\d)这个啊,这个不是1个数字吗,为什么显示结果$1匹配的确是3位呢??

求大神解答··

解决方案

网上这个方法用的是 零宽度正预测先行断言,它断言匹配的自身出现的位置d的后面能跟着匹配到1个或者n个3位数且刚好到结尾$
1.那么如果我将前边的字符串换成'2'的时候我发现也匹配成功了,不管你换的是字符串还是正则表达式,应该都是不成功的。
2.$1匹配的就是表达式(d)这个。你可以把全局g去掉看一下:

'12334565632'.replace(/(\d)(?=(\d{3})+$)/, "$1,"); //"12,334565632"

题中分别匹配的是str[1],str[4],str[7] ,并在后面加上','

这篇关于正则表达式 - 正则:将一串数字的每3个就用逗号分开的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆