正则表达式拆分与负回顾后

问题描述:

字符串我试图分裂:正则表达式拆分与负回顾后

string1, string2, string\,3, string4

我想上面的字符串分割每个逗号,在逗号与反斜线除。

我无法在我的JavaScript中利用否定向后看。

我尝试:

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

逗号都没有被承认。

潜在的解决方案:经过研究,我偶然发现了this SO问题。但是,我不明白这些解决方法已足以将上述代码更改为替换用例。

+0

该输入应该是什么样子:''foo \\,bar“'? (即,当你逃脱转义字符时)。或者这个:''foo \\\,bar“'? – Halcyon

+0

你是否还需要空比赛?就像'foo ,, bar' =>'['foo','','bar']'? –

+0

你的输入是真的'string \,3,'或者'string3 \,'?那第二个逗号真的存在于string3中?否则,'(?

您可以使用

s.match(/(?:[^,\\]|\\.)+/g) 

regex demo。它将匹配除逗号和反斜杠之外的一个或多个字符,或与文字反斜杠一起转义的任何字符。

请注意,字符串文字应具有双反斜线以定义文字反斜杠。

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

根据您的输入样本中的分隔符,没有必要识别逃脱逗号。分隔符是“逗号空格”,所以就使用它。如果您想保留逗号和值之间的空间(或更新你的问题表明,没有这种方式构造输入)

,使用此:

var splits = "string1, string2, string\\,3, string4".split(/,(?=)/); 
 
console.log(splits);

如果你想删除前导空格,使用此:

var splits = "string1, string2, string\\,3, string4".split(/, /); 
 
console.log(splits);