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

javascript 正则前瞻 如何完整匹配这个8位数字

javascript 正则前瞻 如何完整匹配这个8位数字

当年话下 2019-04-13 08:46:46
想把window.location.hash中的纯8位数字匹配出来,可正则前瞻似乎javascript不支持。如何实现这个功能:匹配出完整的8位数字。functiongetValue(str){varm=str.match(/(?:\D)(\d{8})(?:\D)/);returnm&&m[2]?m[2]:'';}varstrArr=['10208899',//有'#10208899',//有'#test10208899',//有'#ff1020889900',//无'#0010208899',//无'#1020^10208899a',//有'#5566880&10208899f',//有'test?#10208899',//有'#10208899.'//有];for(variinstrArr){varid=getValue(strArr[i]);console.log(i,"\t",strArr[i],"\t",id);}
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

还是不太明白题主的意思
像'#ff1020889900'这种情况,不能匹配是正确的结果,因为8位数字'10208899'之后还是数字,所以\D就无法匹配,整个正则表达式就无法匹配成功了。
如果题主的意思是完整的8位数字的,就像你现在使用非捕获分组就够了,只是差一点。
我的建议是(?:\D|)(\d{8})(?:\D|)分别在非捕获分组中多加了一个分支用于匹配空字符情况,
这样就能匹配10208899的情况了。
为此可以使用专门为捕获分组设计的exec方法。
functiongetValue(str){
varm=/(?:\D|)(\d{8})(?:\D|)/.exec(str);
returnm?m[1]:'';
}
                            
查看完整回答
反对 回复 2019-04-13
?
莫回无

TA贡献1865条经验 获得超7个赞

几个问题:
前后除了\D,还需要^和$匹配行首和行尾的情况
既然都非捕获组了,前后两个并不会作为结果返回,m就应该取1才对
所以最终结果或者是/(?:\D|^)(\d{8})(?:\D|$)/
returnm?m[1]
或者/(\D|^)(\d{8})(\D|$)/
returnm&&m[2]?m[2]
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

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