我正在尝试在我的表情符号功能中实现单词边界以进行聊天。但由于某种原因,我似乎无法让边界起作用。我是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如何在他们的聊天中做到这一点?
答案 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;