'a|b||c|d'.split(re)
我想要的结果是
[ 'a', 'b||c', 'd' ]
也就是说,b
和c
保持在一起,因为有两个竖条,而不是一条。
我试过了:
/(?:[^|])\|(?:[^|])/
即,“匹配,但不捕获,分隔符前后的非垂直条”。不,根本不起作用。
(这是在Javascript中,但我认为很多RE库的工作方式相同。)
答案 0 :(得分:4)
您需要lookaround(/(?<!\|)\|(?!=\|)/
),但JavaScript不支持lookbehind。不要拆分字符串,而是尝试匹配:
'a|b||c|d'.match(/([^|]|\|{2,})+/g)
答案 1 :(得分:0)
在您的情况下,由于管道字符|
不是您可以使用的字符:
'a|b||c|d'.split(/\b\|(?!\|)/)
解决JS缺乏外观的问题。
这将在第一个 |
上分开,确保其后面没有|
。
但是,如果您的分隔项目以符号结尾,则会失败,例如“a。| b || c | d” - “a。”不会分开。
我认为您最好的选择是遵循@ NullUserException的建议并替换'||'使用占位符,拆分和替换,或 @ Bergi的匹配解决方案而不是拆分。