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