我正在尝试通过分隔符name\|dial_num|032\|0095\\|\\0099|\9925
拆分字符串|
,但它会跳过\|
。
我在此链接中找到了解决方案:Javascript regexp that matches '.' not preceded by '\' (lookbehind alternative)但它也会跳过\\|
。
正确的结果必须是:[name\|dial_num,032\|0095\\,\\0099,\9925]
。
该规则适用于\\\|
或\\\\\|
等,|
仍然是有效的分隔符,但如果\\\\|
或更多,则不是。{ / p>
任何帮助都将受到赞赏。
答案 0 :(得分:2)
通常的解决方法是使用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,它也不是解决方案,因为(?<!\\)|
也会错误地跳过\\|
。
答案 1 :(得分:0)
我挑战自己使用replace String方法..
我使用regex101.com(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