正则表达式:负环视之间有零个或多个字符

Regex: negative lookarounds with zero or more characters between

我有一个消极的后视和一个消极的前瞻,到目前为止它几乎可以工作。我用谷歌搜索过,我搜索过 Whosebug,但找不到我的确切问题。我想要实现的是捕获括号内的任何文本,只要它们在我的 <code></code> 标签之间找不到。

我的正则表达式尝试

(?<!<code>)\[(.*?)\](?!<\/code>)

测试文本

[bracket]                                           <-- currently matches (ok)
<code>[bracket]                                     <-- currently does NOT match (ok)
[bracket]</code>                                    <-- currently does NOT match (ok)
<code> some text [bracket] other text </code>       <-- currently matches (!!NOT OK!!)
<code>[bracket]</code>                              <-- currently does NOT match (ok)

我真的很难解决这样一个事实,即您必须在负 lookbehind/negative 前瞻中具有固定宽度。我已经尝试了从试图抓取 <code> 和方括号之间的任何字符的任何方法,但只是抓取了 <code> 标签并与上面的几乎所有示例匹配。我试过 ^ 字符来尝试排除任何带有 <code> 的行,但最终只是排除了所有内容。我束手无策。任何方向都非常感谢!!

您可以使用:

<code>[\s\S]*?</code>(*SKIP)(*FAIL)|\[.+?\]

Demo & explanation