亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 320 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號