我有这两个字符串:
'06BRSU6TX6DfBEIMsD9$Bt',#13,$,$,[#2095, #2333],#2181
.AREA.,'Some, text, here',#609794,310.000000000008,699.999999999997
这是我的正则表达式('[^']*'|[^,]+)|([^[\]\,]+)
我们的想法是将字符串与comma
分开,但保留"自由文本"用逗号。
第一个捕获组应捕获两个单引号之间的所有内容。
第二个捕获组应排除[]
。
https://regex101.com/r/jYwK0h/2
如果我将捕获组分开但未合并,则捕获组可以正常工作。
答案 0 :(得分:0)
您可以匹配并捕获所需的模式,并匹配您需要丢弃的模式。最后,只需将捕获的值推送到结果数组:
var rx = /('[^']*')|\[([^\][]*)]|[^,]+/g;
var strs = ["'06BRSU6TX6DfBEIMsD9\$Bt',#13,$,$,[#2095, #2333],#2181", ".AREA.,'Metallsteg, \\X2\\00F6\\X0\\ppna',#609794,310.000000000008,699.999999999997"];
for (var s of strs) {
console.log(s.replace(rx, function($0,$1, $2) {
return $1 ? $1 : $2 ? "[" + $2.replace(/(\s*)([^,]+)/g, "$1'$2'") + "]" : "'" + $0 + "'";
}));
}