Node.js正则分割参数出现重复问题,如何修复?
Node.js正则分割出现重复项的问题修复
问题场景
在Node.js中使用正则表达式分割代码时,分割结果在字符串结尾处出现大量重复参数,不符合预期。
原代码
let args = line.split(/\s(?=(([^"]*"){2})*[^"]*$)/); console.log("LINE: "+line) console.log("SPLIT: "+JSON.stringify(args))
实际输出
LINE: var String: test = "Hello" SPLIT: ["var","String: test = \"Hello\"","Hello\"","String:","test = \"Hello\"","Hello\"","test","= \"Hello\"","Hello\"","=","\"Hello\"","Hello\"","\"Hello\""]
期望输出
LINE: var String: test = "Hello" SPLIT: ["var", "String:", "test", "=", "\"Hello\""]
问题原因
原正则表达式中使用了捕获组((([^"]*"){2})*),而JavaScript的split方法在遇到包含捕获组的正则时,会将捕获组匹配到的内容也添加到最终的结果数组中,这就是导致重复项出现的根本原因。
修复方案
将正则中的捕获组改为非捕获组,只需在组的开头添加?:即可,这样split就不会将组内内容纳入结果数组。修改后的代码如下:
let args = line.split(/\s(?=(?:[^"]*"){2}*[^"]*$)/);
运行修改后的代码,就能得到符合预期的分割结果,不会再出现重复参数。
内容的提问来源于stack exchange,提问作者Pixel445
相关产品推荐
相关产品推荐

