我正在尝试匹配表情符号后跟单词边界\b
。
假设我想匹配:p
和:)
后跟\b
。
/(:p)\b/
工作正常但为什么/(:\))\b/
表现相反?
答案 0 :(得分:7)
由于)
是非单词字符,因此您无法使用word boundary。
简单地说:
\b
允许您执行仅限整个单词搜索\bword\b
形式的正则表达式。 单词字符是a 可用于形成单词的字符。所有不是的字符 单词字符是非单词字符。
使用(:\))
匹配:)
并在第一个捕获组中捕获它。
使用/(:\))(?![a-z0-9_])/i
以避免在笑脸后将任何:)
与字母匹配。它相当于(:\))\B
。
\B
是\b
的否定版本。\B
匹配\b
的每个位置 才不是。实际上,\B
匹配两个单词之间的任何位置 字符以及两个非单词字符之间的任何位置。
答案 1 :(得分:4)
除了stribizhev的答案之外......你可以使用(:\))\B
何时使用以下内容的示例:
\b
:string = That man is batman.
正则表达式\bman\b
仅匹配man
而不匹配man in batman
,因为tm
之间的位置不是单词边界(这是一个单词)。
\B
:string = I am bat-man and he is super - man.
正则表达式\B-\B
与-
中的super - man
匹配,\b-\b
与-
匹配bat-man
1}}因为t-
和-m
之间的位置是字边界..而且(space) -
,- (space)
不是。
注意:如果您将\b
或\B
视为两个字符之间的位置,并且从字符到字符的转换为{{1},则很容易理解}或word to word