2
'a|b||c|d'.split(re)

想要的结果是

[ 'a', 'b||c', 'd' ]

也就是说,bc保持在一起,因为有两个垂直条,而不是一个。

我试过:

 /(?:[^|])\|(?:[^|])/

也就是说,“匹配但不捕获分隔符前后的非垂直条”。不,根本不起作用。

(这是在 Javascript 中,但我认为很多 RE 库都会以相同的方式工作。)

4

2 回答 2

4

您需要环视( /(?<!\|)\|(?!=\|)/),但 JavaScript 不支持环视。不要拆分字符串,而是尝试匹配:

'a|b||c|d'.match(/([^|]|\|{2,})+/g)
于 2013-01-24T00:26:45.543 回答
0

在您的情况下,由于管道字符|不是您可以使用的单词字符:

'a|b||c|d'.split(/\b\|(?!\|)/)

解决 JS 缺乏后视的问题。

这将在第一个 | 确保它后面不跟一个|.

但是,如果您的分隔项以符号结尾,例如“a.|b||c|d”——“a” ,它将失败。不会被拆分出来。

我认为您最好的选择是遵循@NullUserException 的建议并替换 '||' 使用占位符、拆分和替换,或者@Bergi 的匹配解决方案而不是拆分。

于 2013-01-24T00:41:50.380 回答