'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
去掉看一下:题中分别匹配的是
str[1],str[4],str[7]
,并在后面加上','