JavaScript按逗号分割字符串但忽略双引号内逗号的问题
解决按逗号分割字符串但忽略双引号内逗号的问题
你需要实现的是仅分割不在双引号包裹范围内的逗号,原正则表达式中多余的[:""]*片段干扰了引号对的计数逻辑,导致错误分割了引号内部的逗号。
修正后的代码实现
使用以下正则即可满足需求,它会确保待分割的逗号处于双引号对之外(即逗号后剩余的双引号总数为偶数):
function splitByCommas(str) { return str.split(/,(?=(?:[^"]*"[^"]*")*[^"]*$)/); }
测试验证
执行你的测试用例:
console.log(splitByCommas('gango.cs.{"test","asfasf"},ratings.eq.5,name.eq.kings}'));
输出结果与预期一致:
[ 'gango.cs.{"test","asfasf"}', 'ratings.eq.5', 'name.eq.kings}' ]
正则逻辑解析
,(?=...):正向预查结构,仅当逗号满足后续条件时才执行分割(?:[^"]*"[^"]*")*:匹配0或多组完整的双引号包裹片段(非引号字符+引号+非引号字符+引号),用于计数成对的引号[^"]*$:匹配到字符串末尾的所有非引号字符,确保当前逗号后不存在未闭合的双引号(即剩余引号数为偶数)
内容的提问来源于stack exchange,提问作者James Marketer
相关产品推荐
相关产品推荐

