Javascript 匹配“:”)&引用;笑脸后面跟着单词边界

Javascript 匹配“:”)&引用;笑脸后面跟着单词边界,javascript,regex,Javascript,Regex,我正在尝试匹配smiley,后跟单词边界\b 假设我想匹配:p和:),然后是\b /(:p)\b/工作正常,但为什么/(:\)\b/的行为正好相反?此处不能使用a,因为)是非单词字符 简单地说:\b允许您使用 格式为\bword\b的正则表达式。单词字符是一种符号 可以用来构成单词的字符。所有不是 单词字符是非单词字符 使用(:\)匹配:)并在第一个捕获组中捕获它 使用/(:\)(?![a-z0-9\])/i避免将任何:)与笑脸后面的字母匹配。它相当于(:\)\B \B是\B的否定版本\B在\B

我正在尝试匹配smiley,后跟单词边界
\b

假设我想匹配
:p
:)
,然后是
\b

/(:p)\b/
工作正常,但为什么
/(:\)\b/
的行为正好相反?

此处不能使用a,因为
是非单词字符

简单地说:
\b
允许您使用 格式为
\bword\b
的正则表达式。单词字符是一种符号 可以用来构成单词的字符。所有不是 单词字符是非单词字符

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

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

\B
\B
的否定版本<代码>\B在
\B
没有。实际上,
\B
在两个单词之间的任何位置都匹配 字符以及两个非单词字符之间的任何位置


参见和。

对斯特里比雪夫答案的补充。。您可以使用
(:\)\B

关于何时使用内容的示例:

\b
:string=
那个人就是蝙蝠侠。
regex=
\bman\b
只匹配
,而不匹配蝙蝠侠中的
,因为
tm
之间的位置不是单词边界(它是一个单词)

\B
:string=
我是蝙蝠侠,他是超人。
regex=
\B-\B
匹配
-
中的
-
\B-/code>匹配
蝙蝠侠中的
-
,因为
t-
-m
之间的位置是单词边界。。而
(空格)
(空格)
不是


<强>注:如果您认为“代码>>b>代码>或<代码> \b/c>作为两个字符之间的位置,并且如果从字符到字符的转换是<代码> Word到Word 或<代码> Word到非Word

您需要理解什么是Word边界,那么很容易理解。它是
\w
字符类中的字符与
\w
中的字符之间的限制,或者字符串的限制(开头或结尾)
p
是一个单词,
不是。你想匹配
:)
:)%
之类的吗?你能告诉我们语言是什么吗,我将编辑我的问题。
/(:\)/
匹配::)p“,但我不希望这样。那么我该怎么做呢?那么,使用
/(:\)(?![a-z])/I
来避免将任何
:)
与后面的字母匹配。实际上
/(:\)\B/
正以我想要的方式工作,你如何解释这一点?
\B
-断言
\B
不匹配的位置这是真的,因为
\B
匹配非单词边界。