猿问

求解stringObject.split(RegExp)出现字符串分隔错误?

string.split(RegExp)方法使用正则表达式分隔字符串,当正则表达式含有小括号()的时候翻个的字符串会出现错误,但是通过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);

然后我理想的返回结果是

上图是正则表达式中没有加括号时强制性要求添加区号的返回结果


var reg = /\d{3}-\d{7,9}/g;//上图的结果使用该正则

var reg = /(\d{3}-)?\d{7,9}/g;//下图的结果使用该正则

然而加了括号条件以后,使用str.split(reg)以后得到的却是一个很奇怪的结果,里面拆分的结果不仅出现了奇怪的断句错误,还出现带有undefined的数据

https://img3.mukewang.com/5ca46b690001b85b07520559.jpg

导致我后面的循环直接出现更大的错误,求解正则中添加括号出现这样的问题怎么处理?

蝴蝶刀刀
浏览 539回答 1
1回答

精慕HU

原因是split在处理含有捕获组的正则的时候,会把捕获组里面捕获到的数据也当做分割后结果的一部分。如下:代码如下: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"]所以,为了不出现这样的结果,你把()改为(?:)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答