匹配“:)”笑脸,然后是单词边界

时间:2015-04-27 09:19:03

标签: javascript regex

我正在尝试匹配表情符号后跟单词边界\b

假设我想匹配:p:)后跟\b

/(:p)\b/工作正常但为什么/(:\))\b/表现相反?

2 个答案:

答案 0 :(得分:7)

由于)是非单词字符,因此您无法使用word boundary

  

简单地说:\b允许您执行仅限整个单词搜索   \bword\b形式的正则表达式。 单词字符是a   可用于形成单词的字符。所有不是的字符   单词字符非单词字符

使用(:\))匹配:)并在第一个捕获组中捕获它。

使用/(:\))(?![a-z0-9_])/i以避免在笑脸后将任何:)与字母匹配。它相当于(:\))\B

  

\B\b的否定版本。 \B匹配\b的每个位置   才不是。实际上,\B匹配两个单词之间的任何位置   字符以及两个非单词字符之间的任何位置。

请参阅demo 1demo 2

答案 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