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

sha*_*art 17 regex

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

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

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

基本上我在JavaScript分割函数中使用此正则表达式将其拆分为包含以下内容的数组:"word1","{word2 | word3}","word4".

任何帮助将不胜感激!

Div*_*ver 27

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

/\|(?![^{]*})/g
Run Code Online (Sandbox Code Playgroud)

用这个文字

word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }
Run Code Online (Sandbox Code Playgroud)

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


And*_*ong 16

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

\|(?![^{]*})
Run Code Online (Sandbox Code Playgroud)

这种匹配是管接着一个},除了在一个案件{是第一位的.


(?! ... )被称为负前瞻断言.如果我们从一个积极的先行断言开始,这将更容易理解:

\|(?=[^{]*})
Run Code Online (Sandbox Code Playgroud)

以上只匹配的管后跟一个}而不会遇到{第一.当你通过用=a 替换时否定它,如果正面情况无法为真(也称为补语)!,则现在只能成功.

  • @hwnd - 嗯,也许这是可能的,但我没有看到办法.你会发布你在想什么吗?我很好奇! (2认同)
  • 感谢您的解释.因此很少有这些解释. (2认同)