Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 匹配'|';前面没有'\';(回头看备选方案)_Javascript_Regex_Negative Lookbehind - Fatal编程技术网

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