Node.js中含&的字符串分组匹配问题(使用matchAll)
解决方案
你的核心问题是不能直接用&作为分割符,因为部分主体名称内部包含&,得区分作为分隔符的&和名称内的&。观察目标分组可知,每个主体都以TR、LLC、INC这类固定后缀结尾,而分隔符&总是出现在这些后缀(及可选的-50%)之后,所以可以基于这个特征来匹配完整主体。
实现代码
const originalStr = 'PENNER,JANET E TR-50% & PENNER,MICHAEL G TR - 50% & SOURCE LLC & LARRY & FREDDY INC'; // 正则匹配完整主体:允许名称含&,匹配到TR/LLC/INC后缀结束,忽略后面的-50%和分隔符前置空格 const regex = /([\w,.\s&]+?(?:TR|LLC|INC))\s*(?:-50%|)\s*(?=&\s|$)/g; // 使用matchAll提取所有匹配项 const matchedGroups = [...originalStr.matchAll(regex)].map(item => item[1].trim()); // 输出结果 console.log(matchedGroups.join('\n\n'));
正则说明
[\w,.\s&]+?:非贪婪匹配主体内容,允许包含字母、数字、逗号、点、空格和&,避免过度匹配到下一个主体。(?:TR|LLC|INC):非捕获组,匹配主体的固定后缀,确保匹配到完整主体结尾。\s*(?:-50%|)\s*:忽略主体后可选的-50%及前后空格,不捕获这部分内容。(?=&\s|$):正向预查,确保匹配的主体后面要么是分隔符&加空格,要么是字符串结尾,保证分组的准确性。
运行上述代码后,就能得到你想要的分组结果:
PENNER,JANET E TR PENNER,MICHAEL G TR SOURCE LLC LARRY & FREDDY INC
内容的提问来源于stack exchange,提问作者samsun96
相关产品推荐
相关产品推荐

