正则表达式匹配任何或没有字符,除了给定的例外

时间:2015-03-29 12:35:48

标签: regex regex-negation

我正在尝试匹配一个前面没有字符的字符串,但可能根本没有。

示例:我希望匹配" test"的所有情况在括号中,除非它们之前是" ["或" |"。

示例字符串:

(1) {this is a test}              // match
(2) {this [is] also a test }      // match
(3) {test}                        // match
(4) {this is the third |test}     // no match
(5) {this is the third [test}     // no match

我的第一次尝试是:

\{.*[^\||\[]test.*\}

但是,当然,这并不匹配(3),因为括号和" test"之间没有字符。

然后我尝试了一个负面的看法:

\{.*(?!\||\[)test.*\}

但这匹配所有示例字符串。显然,javascript或我正在使用的环境不支持lookbehind。

有办法做到这一点吗?我错过了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

如果您的语言不接受外观,那么您可以考虑使用以下正面的前瞻性正则表达式。

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

DEMO

答案 1 :(得分:1)

您可以使用以下正则表达式:

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

步骤:

  • \ {,从左大括号开始。
  • [^ \ {\}] *,后跟零个或多个非大括号。
  • (?&lt;![\ [|])测试,然后是|[之后不立即进行的测试。
  • [^ \ {\}] *,后跟零个或多个非大括号。
  • \},然后右支撑。