2012-06-11 26 views
0

我正在尝试在聊天的表情图标功能中实现单词边界。但由于某种原因,我似乎无法使字边界起作用。我对正则表达式很陌生。字符边界对符号字符有效吗?

所以,当我做的:

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

出现这种情况:Jsfiddle

它实际上工作正常,并不会删除那些2嗨的那些独自站立。

但是,当我改变了reg到逃脱的笑脸,然后更改字符串:

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

出现这种情况: Jsfiddle

这是行不通的。字符串保持不变。字符边界不能用于符号吗?如果是这样,Facebook如何进行聊天?

+0

请加你**做一些例子**和**不**想匹配。 –

+0

你是什么意思“Facebook如何做...?” –

回答

0

由于\b不会在这种情况下工作,你可以使用:

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

它的工作原理类似于空间边界。

您可以添加多个表情给它,像这样:

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

@ Shawn31313,请参阅更新。不要忘记逃离元字符。 – Qtax

+0

好的。现在,我将如何在新的RegExp()javascript对象中添加上述reg? – Shawn31313

+0

@ Shawn31313,修复语法错误,并在引用时双反斜杠:http://jsfiddle.net/Bzqu8/5/ – Qtax

2

字边界\b代表单词字符\w之间和非单词字符\W(一切)一个零宽度边界(在JavaScript,[A-Za-z_])。

因此,不会有2个表情符号或当表情是由空格,标点符号等

包围最简单的正则表达式。将/[:;]-?[()]/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

或者更简单:'\ w'和'\ W'。尽管Javascript只使用ASCII,但通常很多正则表达式引擎对'\ w'的类有很多。 – Joey

+0

好点。我结合了你的建议。 –

+0

因此,我无法为此使用单词边界:/ – Shawn31313