正则表达式,捕获两组

时间:2017-10-17 17:20:14

标签: javascript regex

我有这两个字符串:

'06BRSU6TX6DfBEIMsD9$Bt',#13,$,$,[#2095, #2333],#2181

.AREA.,'Some, text, here',#609794,310.000000000008,699.999999999997

这是我的正则表达式('[^']*'|[^,]+)|([^[\]\,]+)

我们的想法是将字符串与comma分开,但保留"自由文本"用逗号。

第一个捕获组应捕获两个单引号之间的所有内容。

第二个捕获组应排除[]

https://regex101.com/r/jYwK0h/2

如果我将捕获组分开但未合并,则捕获组可以正常工作。

1 个答案:

答案 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 + "'";
   }));
}