正则表达式,提取字符串不在两个括号之间

时间:2013-10-16 21:26:29

标签: regex

OK正则表达式问题,如何在两个字符之间提取字符,在本例中为括号。

我有一个字符串,例如: word1 | {word2 | word3} |第4条

我只想得到第一个和最后一个'管道',而不是第二个在括号之间。我尝试了无数次使用负克拉和负片组的尝试,似乎无法让它发挥作用。

基本上我在JavaScript拆分函数中使用这个正则表达式将它拆分为一个包含“word1”,“{word2 | word3}”,“word4”的数组。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:24)

在设置为JavaScript的refiddle.com上,尝试使用此模式

/\|(?![^{]*})/g

使用此文本

word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }

这应匹配不在{}内的所有Pipe符号。

答案 1 :(得分:16)

取决于您正在使用的语言/实现,但是......

\|(?![^{]*})

这匹配后跟}的管道,除非{首先出现。


(?! ... )被称为否定先行断言。如果我们从肯定的先行断言开始,这将更容易理解:

\|(?=[^{]*})

以上内容仅匹配 后跟}的管道,而不会首先遇到{。如果您通过将=替换为!来否定这一点,那么匹配现在只有才会成功如果无法使正面情况成立(也称为< EM>补)。