我有一个非常简单的正则表达式,该正则表达式与我期望的不匹配,所以不匹配(实时示例:https://regex101.com/r/RRupbC/1/)。
正则表达式:
/\b(?:Test1 \(VI|Test2 \(VI\))\b/gi
样本输入:
Test1 (VI <- Match
Test2 (VI) <- No Match
我希望正则表达式在第二个输入上匹配,因为它满足Test2(VI)的第二个条件。似乎不承认右括号是有效的匹配。
为什么这种逻辑不正确?如何修改表达式以成功匹配第二个输入示例?
答案 0 :(得分:1)
由于最后一个\b
,第二个字符串不匹配。特别是,您正在执行的有效正则表达式是
\bTest2 \(VI\)\b
,与之匹配
Test2 (VI)
“单词边界”是单词字符和非单词字符之间的空白,反之亦然(为此目的,字符串的开头/结尾被视为非单词字符)。
由于)
是非单词字符,因此必须在目标字符串中后接单词字符以使)\b
匹配(例如Test2 (VI)x
应该成功匹配)。 / p>
一个最小的解决方案可能是将\b
拉入第一个分支:
\b(?:Test1 \(VI\b|Test2 \(VI\))