正则表达式拆分与负回顾后
问题描述:
字符串我试图分裂:正则表达式拆分与负回顾后
string1, string2, string\,3, string4
我想上面的字符串分割每个逗号,在逗号与反斜线除。
我无法在我的JavaScript中利用否定向后看。
我尝试:
var splits = "string1, string2, string\,3, string4".split("(?<!\\\\),");
逗号都没有被承认。
潜在的解决方案:经过研究,我偶然发现了this SO问题。但是,我不明白这些解决方法已足以将上述代码更改为替换用例。
答
您可以使用
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);
该输入应该是什么样子:''foo \\,bar“'? (即,当你逃脱转义字符时)。或者这个:''foo \\\,bar“'? – Halcyon
你是否还需要空比赛?就像'foo ,, bar' =>'['foo','','bar']'? –
你的输入是真的'string \,3,'或者'string3 \,'?那第二个逗号真的存在于string3中?否则,'(?