OK正则表达式问题,如何在两个字符之间提取字符,在本例中为括号。
我有一个字符串,例如: word1 | {word2 | word3} |第4条
我只想得到第一个和最后一个'管道',而不是第二个在括号之间。我尝试了无数次使用负克拉和负片组的尝试,似乎无法让它发挥作用。
基本上我在JavaScript拆分函数中使用这个正则表达式将它拆分为一个包含“word1”,“{word2 | word3}”,“word4”的数组。
非常感谢任何帮助!
答案 0 :(得分:24)
在设置为JavaScript的refiddle.com上,尝试使用此模式
/\|(?![^{]*})/g
使用此文本
word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }
这应匹配不在{}内的所有Pipe符号。
答案 1 :(得分:16)
取决于您正在使用的语言/实现,但是......
\|(?![^{]*})
这匹配不后跟}
的管道,除非{
首先出现。
(?! ... )
被称为否定先行断言。如果我们从肯定的先行断言开始,这将更容易理解:
\|(?=[^{]*})
以上内容仅匹配 后跟}
的管道,而不会首先遇到{
。如果您通过将=
替换为!
来否定这一点,那么匹配现在只有才会成功如果无法使正面情况成立(也称为< EM>补)。