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

发布于 2022-09-07 08:54:52 字数 1116 浏览 15 评论 0

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);

然后我理想的返回结果是

clipboard.png

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤独陪着我 2022-09-14 08:54:52

原因是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"]

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文