OK正则表达式问题,如何在两个字符之间提取一个字符,在这种情况下是括号。
我有一个字符串,例如:字1 |{word2 | word3 } |单词 4
我只想得到第一个和最后一个"管道",而不是括号之间的第二个。我已经尝试了无数次负克拉和负分组的尝试,但似乎无法让它工作。
基本上,我在JavaScript拆分函数中使用此正则表达式将其拆分为包含以下内容的数组:"word1","{word2 |word3}", "word4"。
任何帮助将不胜感激!
尝试使用此模式
/|(?![^{]*})/g
用这段文字
word1 | {word2 | word3 } | word 4 | word 4 | {word2 | word3 }
这应该与不在 {} 内的所有管道符号匹配。
*编辑 - 删除了指向死网站的链接(感谢丹尼斯)
取决于您使用的语言/实现,但是...
|(?![^{]*})
这匹配不后跟}
的管道,除非{
先出现。
该(?! ... )
称为否定前瞻断言。如果我们从一个积极的前瞻性断言开始,这更容易理解:
|(?=[^{]*})
以上仅匹配后跟}
的管道,而不会先遇到{
。当您通过将=
替换为!
来否定它时,匹配现在只有在正情况无法为真(也称为补码)的情况下才会成功。