好的正则表达式问题,如何在两个字符之间提取一个字符,在这种情况下是括号。
我有一个字符串,例如: word1 | {word2 | word3 } | 字 4
我只想得到第一个和最后一个“管道”,而不是括号之间的第二个。我已经尝试了无数次负克拉和负分组的尝试,但似乎无法让它发挥作用。
基本上,我在 JavaScript 拆分函数中使用此正则表达式将其拆分为包含:“word1”、“{word2 | word3}”、“word4”的数组。
任何帮助将不胜感激!
好的正则表达式问题,如何在两个字符之间提取一个字符,在这种情况下是括号。
我有一个字符串,例如: word1 | {word2 | word3 } | 字 4
我只想得到第一个和最后一个“管道”,而不是括号之间的第二个。我已经尝试了无数次负克拉和负分组的尝试,但似乎无法让它发挥作用。
基本上,我在 JavaScript 拆分函数中使用此正则表达式将其拆分为包含:“word1”、“{word2 | word3}”、“word4”的数组。
任何帮助将不胜感激!
在设置为 JavaScript 的refiddle.com上,尝试使用此模式
/\|(?![^{]*})/g
与此文本
word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }
这应该匹配所有不在 {} 内的管道符号。
取决于您使用的语言/实现,但是......
\|(?![^{]*})
这匹配一个不跟随a 的管道,}
除非 a{
先出现。
这(?! ... )
被称为负前瞻断言。如果我们从一个积极的前瞻断言开始,这更容易理解:
\|(?=[^{]*})
上面只匹配一个后面跟着 a}
而没有遇到{
第一个的管道。当您通过替换=
a来否定它时!
,匹配现在只有在没有办法让肯定情况为真(也称为补码)时才成功。