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

3htmauhk  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(166)

OK regex问题,如何提取两个字符之间的NOT字符,在本例中为括号。
我有一串诸如:字1| {字2|字3}|字4
我只想得到第一个和最后一个“管道”,而不是括号之间的第二个。我已经尝试了无数次负克拉和负分组的尝试,似乎不能让它工作。
基本上,我在JavaScript split函数中使用这个正则表达式将其拆分为包含以下内容的数组:“单词1”,“{单词2|第3个字}""、第4个字””。
如有任何帮助,我们将不胜感激!

zte4gxcn

zte4gxcn1#

尝试使用此模式

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

使用此文本

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

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

  • 编辑-删除到死网站的链接(谢谢Dennis)
tpgth1q7

tpgth1q72#

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

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

这与 not 后跟}的管道匹配,但{在前的情况除外。
(?! ... )被称为 * 负前瞻Assert *。如果我们从 * 正 * 前瞻Assert开始,这会更容易理解:

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

上面的例子只匹配一个 is 后面跟着}的管道,而没有先遇到{。当你用!替换=来否定它时,现在只有 * 当肯定的情况不可能 * 为真(也称为 * 补码 *)时,匹配才成功。

相关问题