Javascript 不同类型表情符号的正则表达式匹配列表
我需要创建一个faunconationality,它允许我解析文本,寻找不同格式的表情符号字符串的匹配项。它可以是Javascript 不同类型表情符号的正则表达式匹配列表,javascript,regex,emoticons,Javascript,Regex,Emoticons,我需要创建一个faunconationality,它允许我解析文本,寻找不同格式的表情符号字符串的匹配项。它可以是:)类型的表情符号,也可以是狗()类型的表情符号。 目前我的函数可以找到这两种类型,但是这个任务需要两个不同的正则表达式,我希望只需一步就可以完成。有什么想法吗 JSFIDLE上的实时示例: 以及守则: function replaceEmoticons(text) { var emots1 = { ':)': 'smile.gif', ':(
:)
类型的表情符号,也可以是狗(
)类型的表情符号。
目前我的函数可以找到这两种类型,但是这个任务需要两个不同的正则表达式,我希望只需一步就可以完成。有什么想法吗
JSFIDLE上的实时示例:
以及守则:
function replaceEmoticons(text) {
var emots1 = {
':)': 'smile.gif',
':(': 'sad.gif',
},
emots2 = {
'<dog>': 'dog.gif',
'<fly>': 'fly.gif'
},
regex1,regex2,p,re;
for(p in emots1){
regex1 = "["+p+"]{2}";
re = new RegExp(regex1, "g");
text = text.replace(re, function (match) {
return typeof emots1[match] != 'undefined' ?
'<img src="'+emots1[match]+'"/>' :
match;
});
}
for(p in emots2){
regex2 = "("+p+")(|$)";
re = new RegExp(regex2, "g");
text = text.replace(re, function(match) {
return typeof emots2[match] != 'undefined' ?
'<img src="'+emots2[match]+'"/>' :
match;
});
}
return text;
}
console.log(replaceEmoticons('this is <dog>b a<fly> simple test :) , ;) and more:):('));
函数替换表情(文本){
变量emots1={
“:)”:“smile.gif”,
':(':'sad.gif',
},
emots2={
“dog”:“dog.gif”,
“fly”:“fly.gif”
},
regex1,regex2,p,re;
for(emots1中的p){
regex1=“[”+p+“]{2}”;
re=新的RegExp(regex1,“g”);
text=text.replace(re),function(match){
返回emots1的类型[匹配]!=“未定义”?
'' :
匹配;
});
}
for(emots2中的p){
regex2=“(“+p+”)(|$)”;
re=新的RegExp(regex2,“g”);
text=text.replace(re),function(match){
返回emots2的类型[匹配]!=“未定义”?
'' :
匹配;
});
}
返回文本;
}
log(replaceEmotics('this is dogbafly simple test:),;)和更多:):(');
使用
你可以这样做:
re = new RegExp(smiley1|smiley2|...|smileyN);
我很确定你不需要在每个循环开始时做一些有趣的事情来修改正则表达式。摆脱它,没有什么能阻止你把两个集合合并在一起
但是,在生成正则表达式时,应该转义smileys中的特殊字符(
和)
。另外,我建议将regex搜索设置为不区分大小写,以便
和
都匹配
//helper function to escape special characters in regex
function RegExpEscape(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
function replaceEmoticons(text) {
var emots = {
':)' : 'smile.gif',
':(' : 'sad.gif',
'<dog>': 'dog.gif',
'<fly>': 'fly.gif'
}
var result = text;
var emotcode;
var regex;
for (emotcode in emots)
{
regex = new RegExp(RegExpEscape(emotcode), 'gi');
result = result.replace(regex, function(match) {
var pic = emots[match.toLowerCase()];
if (pic != undefined) {
return '<img src="' + pic + '"/>';
} else {
return match;
}
});
}
return result;
}
//用于转义正则表达式中特殊字符的helper函数
函数RegExpEscape(文本){
返回text.replace(/[-[\]{}()*+?,\\^$\\s]/g,“\\$&”);
}
函数替换表情(文本){
变量emots={
“:)”:“smile.gif”,
':(':'sad.gif',
“dog”:“dog.gif”,
“fly”:“fly.gif”
}
var结果=文本;
变量emotcode;
var regex;
for(emots中的emotcode)
{
regex=newregexp(RegExpEscape(emotcode),'gi');
结果=结果.替换(正则表达式,函数(匹配){
var pic=emots[match.toLowerCase()];
如果(图!=未定义){
返回“”;
}否则{
复赛;
}
});
}
返回结果;
}