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

时间:2018-07-15 13:52:29

标签: regex word-boundary

我有一个非常简单的正则表达式,该正则表达式与我期望的不匹配,所以不匹配(实时示例:https://regex101.com/r/RRupbC/1/)。

正则表达式:

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

样本输入:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

\bTest2 \(VI\)\b

,与之匹配

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

“单词边界”是单词字符和非单词字符之间的空白,反之亦然(为此目的,字符串的开头/结尾被视为非单词字符)。

由于)是非单词字符,因此必须在目标字符串中后接单词字符以使)\b匹配(例如Test2 (VI)x应该成功匹配)。 / p>

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

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