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



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

我有一个字符串,例如:字1 |{word2 | word3 } |单词 4

我只想得到第一个和最后一个"管道",而不是括号之间的第二个。我已经尝试了无数次负克拉和负分组的尝试,但似乎无法让它工作。

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

任何帮助将不胜感激!

尝试使用此模式

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

用这段文字

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

这应该与不在 {} 内的所有管道符号匹配。

*编辑 - 删除了指向死网站的链接(感谢丹尼斯)

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

|(?![^{]*})

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


(?! ... )称为否定前瞻断言。如果我们从一个积极的前瞻性断言开始,这更容易理解:

|(?=[^{]*})

以上仅匹配后跟}管道,而不会先遇到{。当您通过将=替换为!来否定它时,匹配现在只有在正情况无法为真也称为补码)的情况下才会成功。

最新更新