【问题标题】:Parse smilies in Node.js and Socket.io chat app在 Node.js 和 Socket.io 聊天应用程序中解析表情符号
【发布时间】:2015-12-31 14:16:01
【问题描述】:

我已经创建了基于this project 的聊天应用程序,但我现在想做的是为表情符号提供解析器。例如,如果我写如下内容:

What's up? :)

这可以被解析为“怎么了?[图片在这里]”。此外,当有人访问房间时,也需要解析来自该房间的所有消息。最简单的方法是什么?

附:应用没有数据库。

【问题讨论】:

    标签: node.js socket.io chat


    【解决方案1】:

    您可以使用基于正则表达式或任何您想要的简单字符串插值。

    假设我们有一张微笑地图:

    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"
    

    【讨论】:

      【解决方案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/" 必须是笑脸图像的根路径。 笑脸地图必须是一个以文件名为键的对象,而笑脸要被替换为一个数组。

      insertSmiley("Hello World :-)") 
      

      结果:

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

      【讨论】:

        猜你喜欢
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 2012-08-11
        • 1970-01-01
        • 2018-09-15
        • 2014-10-18
        • 2016-04-30
        相关资源
        最近更新 更多