正则表达式不匹配转义括号

Regular Expression Not Matching Escaped Parenthesis

我有一个非常简单的正则表达式,它不会像我期望的那样匹配转义括号(实例:https://regex101.com/r/RRupbC/1/)。

正则表达式:

/\b(?:Test1 \(VI|Test2 \(VI\))\b/gi

示例输入:

Test1 (VI      <- Match
Test2 (VI)     <- No Match

我希望正则表达式在第二个输入上匹配,因为它满足 Test2 (VI) 的第二个条件。它似乎不承认右括号是有效匹配。

为什么这个逻辑不正确,如何修改表达式才能成功匹配我的第二个输入示例?

第二个字符串不匹配,因为最后 \b。特别是,您正在执行的有效正则表达式是

\bTest2 \(VI\)\b

,匹配

  • 单词边界
  • 字符串Test2 (VI)
  • 另一个词边界

一个"word boundary"是单词字符和非单词字符之间的空space,反之亦然(字符串的beginning/end算作非单词字符这个目的)。

因为)是一个非单词字符,需要在目标字符串中跟一个单词字符才能使)\b匹配(例如Test2 (VI)x应该匹配成功) .

一个最小的解决方案可能是将 \b 拉入第一个分支:

\b(?:Test1 \(VI\b|Test2 \(VI\))