鍍金池/ 問答/Java  網(wǎng)絡(luò)安全  HTML/ 求解stringObject.split(RegExp)出現(xiàn)字符串分隔錯誤?

求解stringObject.split(RegExp)出現(xiàn)字符串分隔錯誤?

string.split(RegExp)方法使用正則表達(dá)式分隔字符串,當(dāng)正則表達(dá)式含有小括號()的時(shí)候翻個的字符串會出現(xiàn)錯誤,但是通過string.match(RegExp)的時(shí)候返回的值是我想要的是正確的
例如

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é)果是

clipboard.png

上圖是正則表達(dá)式中沒有加括號時(shí)強(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ù)

clipboard.png
導(dǎo)致我后面的循環(huán)直接出現(xiàn)更大的錯誤,求解正則中添加括號出現(xiàn)這樣的問題怎么處理?

回答
編輯回答
空痕

原因是split在處理含有捕獲組的正則的時(shí)候,會把捕獲組里面捕獲到的數(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é)果,你把()改為(?:)

2017年1月22日 18:07