我有一个用图像表情符号替换文本表情符号等的功能
如何制作此案例 - 不敏感? 我尝试在替换器上使用“gi”和“ig”,但它似乎没什么区别
var emots = {
':)' : 'smile',
':-)' : 'smile',
';)' : 'wink',
';-)' : 'wink',
':(' : 'downer',
':-(' : 'downer',
':D' : 'happy',
':-D' : 'happy',
'(smoke)' : 'smoke',
'(y)' : 'thumbsup',
'(b)' : 'beer',
'(c)' : 'coffee',
'(cool)' : 'cool',
'(hehe)' : 'tooth',
'(haha)' : 'tooth',
'(lol)' : 'tooth',
'(pacman)' : 'pacman',
'(hmm)' : 'sarcastic',
'(woot)' : 'woot',
'(pirate)' : 'pirate',
'(wtf)' : 'wtf'
};
function smile(str){
var out = str;
for(k in emots){
out = out.replace(k,'<img src="/emoticons/'+emots[k]+'.gif" title="'+k+'" />','g');
}
return out;
};
答案 0 :(得分:2)
变化:
out = out.replace(k,'<img src="/emoticons/'+emots[k]+'.gif" title="'+k+'" />','g');
要:
out = out.replace(new RegExp(k.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), 'ig'), '<img src="/emoticons/'+emots[k]+'.gif" title="'+k+'" />');
中获取的正则表达式转义函数
答案 1 :(得分:1)
这比表面上看起来有点棘手。以下是完整的解决方案。为简单起见,它只对目标字符串使用一次正则表达式搜索。
请注意,因为它不区分大小写(例如,(hehe)
和(HeHe)
被视为相同),:-d
也被视为与:-D
相同。
var emots = {
':)' : 'smile',
':-)' : 'smile'
// Add the rest of your emoticons...
};
// Build the regex that will be used for searches
var emotSearch = [];
for (var p in emots) {
if (emots.hasOwnProperty(p)) {
emotSearch.push(p.replace(/[-[{()*+?.\\^$|]/g, '\\$&'));
if (p !== p.toLowerCase()) {
emots[p.toLowerCase()] = emots[p];
}
}
}
emotSearch = RegExp(emotSearch.join('|'), 'gi');
function smile(str) {
return str.replace(emotSearch, function ($0) {
var emot = $0.toLowerCase();
if (emot in emots) {
return '<img src="/emoticons/' + emots[emot] + '.gif" title="' + $0 + '" />';
}
return $0;
});
}
答案 2 :(得分:-2)
或者在运行检查之前在输入上使用.toLowerCase()?