使用负回顾后发进行正则表达式分割

5

我要分割的字符串:

string1, string2, string\,3, string4

我想在每个逗号上分割上面的字符串,但是要排除反斜杠转义过的逗号。

我无法在我的JavaScript中使用负回顾前缀。

我的尝试:

var splits = "string1, string2, string\,3, string4".split("(?<!\\\\),");

其中没有一个逗号被识别出来。

潜在解决方案:经过研究,我偶然发现了这个SO问题。然而,我对解决方案不够了解,无法修改上述代码以替换使用情况。


这个输入的输出应该是什么样子:"foo\\, bar"?(即当您转义转义字符时)。或者这个:"foo\\\, bar" - Halcyon
你是否也需要获取空匹配项?例如 foo,,bar => ['foo', '', 'bar'] - Wiktor Stribiżew
你的输入真的是 string\,3, 还是 string3\,?那个第二个逗号在 string3 中真的存在吗?否则,使用 (?<!\\), - Shawn Mehan
是的,我需要空匹配。输出应该如下所示: "string1 " "string2 " "string,3 " "string4" - J Aronson
1个回答

5
您可以使用:
s.match(/(?:[^,\\]|\\.)+/g)

请查看正则表达式演示。它将匹配一个或多个逗号和反斜杠之外的字符,或任何被转义成字面上的反斜杠的字符。

请注意,字符串文字应该有双反斜杠来定义字面上的反斜杠。

var splits = "string1, string2, string\\,3, string4".match(/(?:[^,\\]|\\.)+/g);
console.log(splits);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接