正则表达式匹配整个单词不起作用

为新秀问题道歉。

我有一个小日记,我让用户评论我发布的内容并将某些字符转换为表情符号。

所以🙂成为一个图像并且:d变为等等。

现在,最近,我的一个朋友发布了一个教育链接,其中有一个:d在url中,我的笑脸正则表达式跳转到链接并将其分成碎片,带有一个大笑脸图像。

你得到了想法。

所以我把我的正则表达式改为:d\b:d\b并且期望它匹配整个单词,如果:d完全是单独的。 你猜怎么着? 正则表达式现在没有了。

这里是我所谈论的示例演示

我如何让正则表达式只匹配:d自己? 谢谢。

您将需要使用后面的观察并在字符串和空白的开头/结尾处向前看匹配,因为您尝试匹配的字符不一定会触发通常的单词边界规则。

使用(?<=^|\s):d(?=$|\s)此模式适用于所有匹配,例如(?<=^|\s):\)(?=$|\s)

那是因为\b匹配单词边界。 当你把它放在:d后面时它会起作用,因为d被认为是一个单词。 :不被视为单词字符,因此不是单词边界。 用空格或锚点的lookbehind修复它:

 (?<=^|\s):d\b 

编辑:正如Bob Vale指出的那样,如果你匹配一个笑脸,这也适用://不会触发一个单词边界。 你必须做同样的事情,但有一个前瞻:

 (?<=^|\s):d(?=$|\s)