Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同类型表情符号的正则表达式匹配列表_Javascript_Regex_Emoticons - Fatal编程技术网

Javascript 不同类型表情符号的正则表达式匹配列表

Javascript 不同类型表情符号的正则表达式匹配列表,javascript,regex,emoticons,Javascript,Regex,Emoticons,我需要创建一个faunconationality,它允许我解析文本,寻找不同格式的表情符号字符串的匹配项。它可以是:)类型的表情符号,也可以是狗()类型的表情符号。 目前我的函数可以找到这两种类型,但是这个任务需要两个不同的正则表达式,我希望只需一步就可以完成。有什么想法吗 JSFIDLE上的实时示例: 以及守则: function replaceEmoticons(text) { var emots1 = { ':)': 'smile.gif', ':(

我需要创建一个faunconationality,它允许我解析文本,寻找不同格式的表情符号字符串的匹配项。它可以是
:)
类型的表情符号,也可以是
狗(
)类型的表情符号。 目前我的函数可以找到这两种类型,但是这个任务需要两个不同的正则表达式,我希望只需一步就可以完成。有什么想法吗

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 &lt;dog&gt;b a&lt;fly&gt; 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',
        '&lt;dog&gt;': 'dog.gif',
        '&lt;fly&gt;': '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()];
如果(图!=未定义){
返回“”;
}否则{
复赛;
}
});
}
返回结果;
}