字边界是否适用于符号字符?

时间:2012-06-11 16:20:48

标签: javascript regex word-boundary

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

所以当我这样做时:

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

发生这种情况:Jsfiddle

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

但是当我将reg改为逃脱的笑脸然后改变字符串时:

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

发生这种情况: Jsfiddle

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

2 个答案:

答案 0 :(得分:2)

单词边界\b表示单词字符\w(javascript,[A-Za-z_])和非单词字符\W(其他所有内容)之间的零宽度边界。< / p>

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

最简单的正则表达式是/[:;]-?[()]/gi,它支持表情符号)和frownies (,可选短划线和眼睛:或眨眼;

修改

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

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

在这些情况下应该替换::-)cool :( not!

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

答案 1 :(得分:0)

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

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

其作用类似于空间边界。

您可以像这样添加几个表情符号:

/(\s|^)(?::\)|:\(|:\||:\]|:\[)(?!\S)/g;