Javascript 匹配'|';前面没有'\';(回头看备选方案)
我正试图用分隔符拆分字符串Javascript 匹配'|';前面没有'\';(回头看备选方案),javascript,regex,negative-lookbehind,Javascript,Regex,Negative Lookbehind,我正试图用分隔符拆分字符串,但它将跳过\\\。 我在这个链接中找到了解决方案:但它也跳过了\\\\\\\\\ 正确的结果必须是:[name\| dial_num,032\|0095\,\\0099\9925] 在\\\\\\\\\\\或\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\等情况下,\\\\\\\\\\\\仍然是一个有效的分隔符,但在\\\\\\\\\\\\\\\\或更高的情况下,它不是 任何帮助都将不胜感激。通常的解决方法是使用match而不是split: >
,但它将跳过\\\
。
我在这个链接中找到了解决方案:但它也跳过了\\\\\\\\\
正确的结果必须是:[name\| dial_num,032\|0095\,\\0099\9925]
在\\\\\\\\\\\
或\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
等情况下,\\\\\\\\\\\\
仍然是一个有效的分隔符,但在\\\\\\\\\\\\\\\\
或更高的情况下,它不是
任何帮助都将不胜感激。通常的解决方法是使用
match
而不是split
:
> s = "name\\|dial_num|032\\|0095\\\\|\\\\0099|\\9925"
"name\|dial_num|032\|0095\\|\\0099|\9925"
> s.match(/(\\.|[^|])+/g)
["name\|dial_num", "032\|0095\\", "\\0099", "\9925"]
顺便说一句,即使JS确实支持lookbehinds,它也不是一个解决方案,因为
(?也会错误地跳过\\\\\;
我挑战自己使用替换字符串方法
我使用(一个流行的PCRE、Javascript和Python正则表达式引擎在线测试工具)得到了正确的结果
做得很好!谢谢!
// input : name\|dial_num|032\|0095\\|\\0099|\9925
// regex : ([^\\|](?:\\\\)*)\| with global flag
// replacement : $1,
// output: name\|dial_num,032\|0095\\,\\0099,\9925 <= seams okey right !?
var str = 'name\\|dial_num|032\\|0095\\\\|\\\\0099|\\9925';
str = str.replace(/([^\\|](?:\\\\)*)\|/g,'$1,');
console.log(str);
// > name\|dial_num,032\|0095\\,\\0099,\9925