0

我正在尝试在我的表情符号功能中实现单词边界以进行聊天。但由于某种原因,我似乎无法让边界这个词起作用。我是正则表达式的新手。

所以当我这样做时:

var reg = /\b\Hi\b/gi;
var str = 'HiHiHi Hi HiHiHi Hi';
alert(str.replace(reg, ''));

发生这种情况:Jsfiddle

它实际上工作正常,并且确实删除了那些单独站立的 2 个 Hi。

但是当我将 reg 更改为转义的笑脸然后更改字符串时:

var reg = /\b\:\)\b/gi;
var str = 'HiHi:) :) HiHiHi :)';
alert(str.replace(reg, ''));

发生这种情况: Jsfiddle

它只是行不通。字符串保持不变。是不是单词边界不能用于符号?如果是这样,Facebook 如何在他们的聊天中做到这一点?

4

2 回答 2

2

单词边界表示单词字符(在 javascript 中)和非单词字符(其他所有字符)\b之间的零宽度边界。\w[A-Za-z_]\W

因此,两个表情符号之间或当表情符号被空格、标点符号等包围时,不会有边界。

最简单的正则表达式是,它支持带有可选破折号和眼睛或眨眼的/[:;]-?[()]/gi笑脸)和皱眉。(:;

编辑:

这将需要一个空格或字符串的开头(作为一个捕获组,因为 Javascript 不支持后视),然后它使用上面的正则表达式,然后它必须跟在字符串或空格的结尾。

var reg = /(\s|^)[:;]-?[()](?:\s|$)/gi;
var str = 'HiHi:) :) HiHiHi :)';
alert(str.replace(reg, '$1'));

在这些情况下应更换::-),cool :( not!

在这些情况下不应更换:Digits:(0,1,2,3),hi :(.

于 2012-06-11T16:25:06.217 回答
0

由于\b在这种情况下不起作用,您可以使用:

var re = /(\s|^):\)(?!\S)/g;
var str = 'HiHi:) :) HiHiHi :)';
alert(str.replace(re, '$1'));

这就像一个空间边界。

您可以像这样添加几个笑脸:

/(\s|^)(?::\)|:\(|:\||:\]|:\[)(?!\S)/g;
于 2012-06-11T16:36:46.740 回答