2013-10-16 91 views
11

好的正则表达式的问题,如何提取一个不在两个字符之间的字符,在这种情况下括号。正则表达式,提取字符串不在两个括号之间

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

我只想得到第一个和最后一个'pipe',而不是括号内的第二个。我尝试过无数克拉负面和负面分组的尝试,似乎无法使其发挥作用。

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

任何援助将不胜感激!

+0

什么'酒吧'?这不是你的例子。 –

+0

你使用什么语言或工具?你能告诉我们一些你已经尝试过的吗? –

+0

@CarlNorum他的意思是'word1',它是**垂直条**'|':)之前的 –

回答

17

refiddle.com设定为JavaScript,请尝试使用这种模式

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

与本文

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

这应该与所有未里面的管道符号{}。

+0

感谢潜水员,这个伎俩! –

12

取决于你使用的语言/实行,但是...

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

该管道是后跟一个}除了一个{至上的情况相匹配。


(?! ...)称为负前向断言

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

以上只匹配一个管道将后跟一个}没有遇到{第一:如果我们开始与积极前向断言这是比较容易理解。如果通过将=替换为!来抵消该情况,则匹配现在仅成功如果没有办法对于正确情况为真(也称为补码)。

+0

为什么不直接在这里看看? – hwnd

+2

@hwnd - 嗯,也许这是可能的,但我没有看到一种方式。你会发布你在想什么吗?我很好奇! –

+2

感谢您的解释。所以很少有这些解释。 –

相关问题