解析Node.js和Socket.io聊天应用程序

时间:2015-10-03 13:05:54

标签: node.js socket.io chat

我已根据this project创建了聊天应用程序,但我现在要做的是为smilies提供解析器。例如,如果我写的内容如下:

What's up? :)

可以解析为"什么? [image here]" 。此外,当有人访问房间时,也需要解析来自该房间的所有消息。最简单的方法是什么?

P.S。 App没有数据库。

2 个答案:

答案 0 :(得分:2)

var smileyMap={
    "smile.png":[":)",":-)"],
    "sad.png":[":(",":-("]
};

var insertSmiley=function(basePath,smileys){
    var replacements=[];
    Object.keys(smileys).forEach(function(file){
        var _file="<img src=\""+basePath+file+"\"\>";
        smileys[file].forEach(function(chars){
            var reg=new RegExp(chars.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"),"g");
            replacements.push([reg,_file]);
        });
    });
    return function(text){
        return replacements.reduce(function(line,replacement){
            return line.replace(replacement[0],replacement[1]);
        },text);
    }
}("http://example.com/images/",smileyMap);

http://example.com/images/”必须是笑脸图像的根路径。 smileyMap必须是一个以文件名为键的对象,以及要替换为数组的表情符号。

insertSmiley("Hello World :-)") 

结果:

Hello World <img src="http://example.com/images/smile.png">

答案 1 :(得分:2)

您可以使用基于Regex或任何您想要的简单字符串插值。

让我们想象一下,我们有微笑的地图:

const SMILES_MAP = {
  ':)': 'http://link-to-smiley.png',
  ':0': 'http://link-to-another-smiley.png'
};

我们还有一个名为message的消息字符串。让我们构建一个用图像替换所有微笑的函数:

function buildMessage(message) {
  let smiles = Object.keys(SMILES_MAP);
  smiles.forEach(smile => message = message.replace(smile, SMILES_MAP[smile]));
  return message;
}

使用消息参数调用函数并获取结果:

buildMessage("Hello there :)"); // Returns "Hello there http://link-to-smiley.png"