如何正确拆分含内嵌逗号的姓名字符串?解决split拆分异常问题
解决含内嵌逗号的姓名字符串拆分问题
直接用,split(',')会把姓名内部的逗号(如John, Smith里的逗号)误判成分隔符,导致拆分结果不符合预期。核心思路是通过正则匹配完整的姓名单元,而非盲目按逗号拆分——我们可以利用姓名的格式规律:姓名要么是无逗号的单/多词组合(如Emily、Sasha Flora),要么是名, 姓的带逗号格式(如John, Smith)。
修改后的代码
var myValue = ["Emily, Sasha Flora, John, Smith, Camille-O'neal"]; // 提取数组中的目标字符串 var targetStr = myValue[0]; // 正则匹配所有符合格式的姓名:支持空格、连字符、撇号,以及"名, 姓"结构 var namePattern = /[A-Z][a-z'-]+(?:(?: |, )[A-Z][a-z'-]+)*/g; // 匹配结果转换为目标对象格式 var names = targetStr.match(namePattern).map(item => ({ name: item.trim() })); // 验证输出(会打印期望的姓名列表) console.log(names.map(obj => obj.name).join('\n'));
正则表达式说明
[A-Z][a-z'-]+:匹配姓名的起始部分,要求大写字母开头,后续可跟小写字母、连字符或撇号(?:(?: |, )[A-Z][a-z'-]+)*:非捕获组,匹配姓名的后续部分,支持两种分隔方式:空格(如Sasha Flora)或逗号+空格(如John, Smith),*表示该部分可重复0次或多次g:全局匹配模式,找出字符串中所有符合规则的姓名单元
执行后会得到你期望的结果:每个姓名被正确识别,内部的逗号不会被拆分。
内容的提问来源于stack exchange,提问作者Hella Klala
相关产品推荐
相关产品推荐

