Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 - Fatal编程技术网

JavaScript:接受消息并将特定字符替换为代码行的函数?

JavaScript:接受消息并将特定字符替换为代码行的函数?,javascript,Javascript,我在Node.js上有一个聊天应用程序,我刚刚为它制作了笑脸。 如何将消息中的所有字符集扫描/替换为代码行?(图片) 这是正在添加到聊天窗口的消息 $("#chatEntries").append('<div class="messagesOLD">' + "<span class='msg_date'>"+dateFormat(time)+"</span><span class='msg_seperator'> | </span>&l

我在Node.js上有一个聊天应用程序,我刚刚为它制作了笑脸。 如何将消息中的所有字符集扫描/替换为代码行?(图片)

这是正在添加到聊天窗口的消息

$("#chatEntries").append('<div class="messagesOLD">' +
"<span class='msg_date'>"+dateFormat(time)+"</span><span class='msg_seperator'> | </span><span class='msg_name'>"+ pseudo + '</span> : ' + replaceEmoticons(msg) + '</div>');
数组/对象名称是我希望在消息中替换的实际字符集。 所有笑脸的位置如下:

最后,我希望所有消息看起来像:

Hello how are you all doing today? :D
将成为:

Hello how are you all doing today? <img src='http://example.com/public/images/smileys/laugh.png' id='chat_smls'/>
你好,大家今天好吗?
更新:

当字符集前后都有空格时,它只需要替换字符集

因此:

Hello:D=无效。
Hello:DHow=无效
Hello:DHow=无效
Hello:D How=有效。

只需调用replace:

function replaceEmoticons(str) {
    for (var key in smileys) {
        var re = new RegExp("(?:^|\\s)" + key.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "(?=$|\\s)", 'g');
        str = str.replace(re, "<img src='http://example.com/public/images/smileys/" + smileys[key] + "' id='chat_smls'/>");
    }
    return (str);
}

输入:
你好,你们今天好吗D

结果:
使用一个对象:
{}
只需将smileys=[]更改为smileys={};是吗?是的,没错。您甚至可以使用一个完整的对象文本,比如
var smileys={:/“:“derp.png”、“:)”:“happy.png”、…}
这缺少了您想要添加的内容/g如果smileys数组中的位置发生了更改,则可以将
http://
中的
:///code>替换为derp smiley。我已经用规范更新了@OmriAharon提到的那些情况的问题。我刚刚通过运行代码注意到了一些情况:如果我说enter::D Hello?:它只将第一个:D转换为smiley,另一个保持为char set。只是修复了它。处理您添加的需求。
function replaceEmoticons(str) {
    for (var key in smileys) {
        var re = new RegExp("(?:^|\\s)" + key.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "(?=$|\\s)", 'g');
        str = str.replace(re, "<img src='http://example.com/public/images/smileys/" + smileys[key] + "' id='chat_smls'/>");
    }
    return (str);
}