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

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

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

蝴蝶刀刀 2019-03-27 16:13:17
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的数据导致我后面的循环直接出现更大的错误,求解正则中添加括号出现这样的问题怎么处理?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

原因是split在处理含有捕获组的正则的时候,会把捕获组里面捕获到的数据也当做分割后结果的一部分。如下:
https://img1.sycdn.imooc.com//5ca46b7300015ef208000379.jpg

代码如下:



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"]

所以,为了不出现这样的结果,你把()改为(?:)


查看完整回答
反对 回复 2019-04-03
  • 1 回答
  • 0 关注
  • 538 浏览
慕课专栏
更多

添加回答

举报

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