使用split()方法拆分含内嵌逗号的逗号分隔字符串的数组问题
解决方案
如果你的带内嵌逗号的元素有固定特征(比如例子里都是带, inc.的公司名),可以用正则表达式直接匹配整体,不用手动给每个元素加引号。直接看代码:
var str = 'abc, abc, inc., abd'; // 正则规则:要么匹配包含", inc."的完整项,要么匹配普通的非逗号内容 var matchRegex = /(?:[^,]+, inc\.|[^,]+)/g; // 提取所有符合规则的项,再去掉每个元素前后的空格 var resultArray = str.match(matchRegex).map(item => item.trim()); console.log(resultArray); // 输出:["abc", "abc, inc.", "abd"]
简单说明:
/(?:[^,]+, inc\.|[^,]+)/g这个正则的逻辑:[^,]+匹配任意多个非逗号字符, inc\.匹配, inc.(点号要转义,因为正则里点号是通配符)|表示“或者”,所以整个规则会优先抓带, inc.的完整项,再抓普通的不带内嵌逗号的项
match()方法会把所有符合规则的内容提取成数组map(item => item.trim())用来清除每个元素前后的空格,避免出现' abd'这种带冗余空格的元素
如果你的内嵌逗号元素有其他固定特征(比如带, ltd.这类后缀),只要修改正则里的, inc\.部分就行,比如改成, ltd\.就能匹配带, ltd.的项。要是没有固定特征,得先梳理清楚内嵌逗号的出现规律,再调整正则逻辑。
内容的提问来源于stack exchange,提问作者Jaya Kumari
相关产品推荐
相关产品推荐

