蝴蝶刀刀
2019-03-27 16:13:17
string.split(RegExp)方法使用正則表達(dá)式分隔字符串,當(dāng)正則表達(dá)式含有小括號()的時候翻個的字符串會出現(xiàn)錯誤,但是通過string.match(RegExp)的時候返回的值是我想要的是正確的例如var str = '【廣州市】 【廣州黃埔】(020-12345678、020-87654321) 的 88888888表帶 () 已攬收';var reg = /(\d{3}-)?\d{7,9}/g;var phones = str.match(reg);console.log(phones);var arr = str.split(reg);console.log(arr);var element = [];for(var i=0;i<arr.length;i++){ var item = { text:arr[i], click:false } element.push(item); if(i==arr.length-1){ break; } var item2 = { text:phones[i], click:true } element.push(item2);}console.log(element);然后我理想的返回結(jié)果是上圖是正則表達(dá)式中沒有加括號時強(qiáng)制性要求添加區(qū)號的返回結(jié)果var reg = /\d{3}-\d{7,9}/g;//上圖的結(jié)果使用該正則var reg = /(\d{3}-)?\d{7,9}/g;//下圖的結(jié)果使用該正則然而加了括號條件以后,使用str.split(reg)以后得到的卻是一個很奇怪的結(jié)果,里面拆分的結(jié)果不僅出現(xiàn)了奇怪的斷句錯誤,還出現(xiàn)帶有undefined的數(shù)據(jù)導(dǎo)致我后面的循環(huán)直接出現(xiàn)更大的錯誤,求解正則中添加括號出現(xiàn)這樣的問題怎么處理?
1 回答

精慕HU
TA貢獻(xiàn)1845條經(jīng)驗 獲得超8個贊
原因是split在處理含有捕獲組的正則的時候,會把捕獲組里面捕獲到的數(shù)據(jù)也當(dāng)做分割后結(jié)果的一部分。如下:
代碼如下:
var str="abclskd,jsldk-lskdfj778,jsdkf*jdkf";
var regex1=/[,*-]/;
str.split(regex1);
(5) ["abclskd", "jsldk", "lskdfj778", "jsdkf", "jdkf"]
var regex2=/([,*-])/;
str.split(regex2);
(9) ["abclskd", ",", "jsldk", "-", "lskdfj778", ",", "jsdkf", "*", "jdkf"]
var regex3=/(?:[,*-])/;
str.split(regex3);
(5) ["abclskd", "jsldk", "lskdfj778", "jsdkf", "jdkf"]
所以,為了不出現(xiàn)這樣的結(jié)果,你把()改為(?:)
添加回答
舉報
0/150
提交
取消