例如,我们通过一个函数把一个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,
慕斯709654
相关分类