我有以下JavaScript代码。
var emoticons = {
':)': '<span class="emoticon emoticon_smile"></span>',
':-)': '<span class="emoticon emoticon_smile"></span>',
':(': '<span class="emoticon emoticon_sad"></span>',
':d': '<span class="emoticon emoticon_bigSmile"></span>',
':D': '<span class="emoticon emoticon_bigSmile"></span>'
}
现在要用给定文本中的span替换情感我正在使用以下函数
function Emotions (text) {
if (text == null || text == undefined || text == "") return;
var pattern = /[:\-)(D/pPy@'*]+/gi;
return text.replace(pattern, function (match) {
return typeof emoticons[match] != 'undefined' ?
emoticons[match] :
match;
});
}
现在上面的代码工作正常。如果我在下面的函数中传递文本
Emotions("Hey this is a test :( :(");
看到2个情绪之间的空间特征。
但如果我删除两种情感之间的空间,那么它就不起作用。如下所示
Emotions("Hey this is a test :(:(");
我的正则表达式有问题,但我无法弄明白。
答案 0 :(得分:6)
/:-?[()pPdD]/gi
括号中的字符是posibilites并按顺序保留
答案 1 :(得分:1)
表达式无法判断“:( :(”应该被视为两个“块”,因为“:( :(”完全满足你的正则表达式pattern
。
例如,如果您知道所有表情符号都以冒号开头(:),您可以使用以下表达式来检查表情符号“块”
:[\-)(D/pPy@'*]+
(冒号现在位于角色类前面)
答案 2 :(得分:0)
当您删除空格时,您的整个情感序列:(:(
与您的模式/[:\-)(D/pPy@'*]+/
匹配(作为单序列)。由于没有与:(:(
关联的范围,因此不会返回任何内容。
你应该找到一种方法来划分你的角色序列(例如在你的模式前添加一个像/ [:\-)(D/pPy@'*]+/
这样的空格,但是在这种情况下不要忘记在你面前添加一个空格跨度)。
答案 3 :(得分:0)
尝试将正则表达式更改为
var pattern = /:[\-)(D/pPy@'*]+/gi;
答案 4 :(得分:0)
使用此表达式搜索,您的代码将起作用
var pattern = /:[( - )dD] + / gi;