为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2019-04-13 08:37:18
例如,我们通过一个函数把一个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,
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
(?:exp)表示非捕获性分组,它不会存在匹配成功后的分组里
可以看下我在这里对?=的解释
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 301 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信