正则表达式中 ?= 和 ?: 的区别

例如,我们通过一个函数把一个number类型的数字转换成一个字符串,并且每三位给他加上一个',';1999->1,999
先看看(?=pattern)的使用,下面这个是正确的:
functiongroupByCommas(n){
returnn.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",");
}
console.log(groupByCommas(1234567));//1,234,567
如果我们删掉(\d{3})后面的'+'的话,全局标志依然还在,但是这个时候,就只能匹配字符串中的部分了。
functiongroupByCommas(n){
returnn.toString().replace(/\B(?=(\d{3})(?!\d))/g,",");
}
console.log(groupByCommas(1234567));//1234,567
我的看法是这样的:正则表达式等价于
/\B(?=(\d{3}){1}(?!\d))/g
所以当匹配到匹配项的时候,index的位置已经到了4与5之间,而前面的正则是通过
/\B(?=(\d{3}){1}(?!\d))/g/\B(?=(\d{3}){2}(?!\d))/g
匹配。
最后如果我们把?=换成?:的话:
functiongroupByCommas(n){
returnn.toString().replace(/\B(?:(\d{3})+(?!\d))/g,",");
}
console.log(groupByCommas(1234567));//1,
米琪卡哇伊
浏览 302回答 2
2回答

慕斯709654

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp(?:exp)表示非捕获性分组,它不会存在匹配成功后的分组里可以看下我在这里对?=的解释
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript