在下面的字符串中,我试图匹配独立Inc.
s。
Inc. aa Inc. bbbInc. Inc.
以下正则表达式不起作用:
/\bInc\.\b/ # got zero matches
/\bInc\.(\b|$)/ # matched the last Inc.
我认为这是因为\b
匹配单词和非单词字符之间的边界,我在\b
之后有一个\.
,这是一个非单词字符。我调整它以使其工作。
/\bInc\.($|\W)/
/\bInc\.\B/
答案 0 :(得分:2)
您希望匹配"Inc."
后跟非单词字符。由于"."
是非单词字符,因此您在结束边界处所期望的是\W\W
序列(或字符串的结尾)。 \b
匹配\w\W
或\W\w
序列的边界,因此其匹配不会与预期匹配相交。
第四个表达式有效,因为\B
匹配\w\w
序列或\W\W
序列(或字符串的开头或结尾)的边界,因为&#34 ;"匹配\W
,\.\B
匹配缩小到\W\W
(或字符串的结尾),这是您想要的。
比较第三和第四个表达式,第三个表达式有两个问题。 (1)请注意\W
匹配字符串。因此/\bInc\.($|\W)/
将在匹配中包含您想要的部分后面的字符。为了避免这种情况,你可以使用前瞻:/\bInc\.(?=$|\W)/
,但与之相比,第四个更好。 (2)虽然您的特定示例不是问题,但当字符串超出单行时,$
将无法正确匹配字符串的结尾。使用\z
会更好。
我想不出比第四个更好的一个。
答案 1 :(得分:0)
字边界(\ b)是两个字符之间的一个点,它的一边是\ w,另一边是\ W(按任意顺序),从头开始计算虚构字符字符串的结尾与\ W匹配。
因为\w
代表[a-zA-Z0-9_]
\b
不匹配。正确地假设。
\bInc\.\B
匹配Inc..
或Inc.
之后的任何非\ w字符
\bInc\.($|\W)
如果您要匹配Inc.
后跟空格或换行符,我会使用
\bInc\.(\s|$)