我如何根据孤立的角色分裂?

时间:2013-01-24 00:18:09

标签: javascript regex

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

想要的结果是

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

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

我试过了:

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

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

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

2 个答案:

答案 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的匹配解决方案而不是拆分。