用JavaScript解析表情符号

用JavaScript解析表情符号,javascript,regex,Javascript,Regex,我有一个textarea作为注释框,还有一个div显示注释的渲染预览。我希望能够解析表情符号,并在预览区域将其渲染为图像 使用下面的代码,一些表情符号可以工作,而其他的则不行。不起作用的是:angel,arrow,at,:-],:-?,B-,B),;),感叹号,您需要向正则表达式添加更多捕获组: msg.replace(/(\:\)|\:-\)|\:D|\:-D|\blol\b|\:-\||\:-\(|\;-\)|angel|arrow)/g --------------------------

我有一个
textarea
作为注释框,还有一个
div
显示注释的渲染预览。我希望能够解析表情符号,并在预览区域将其渲染为图像


使用下面的代码,一些表情符号可以工作,而其他的则不行。不起作用的是:
angel,arrow,at,:-],:-?,B-,B),;),感叹号,您需要向正则表达式添加更多捕获组:

msg.replace(/(\:\)|\:-\)|\:D|\:-D|\blol\b|\:-\||\:-\(|\;-\)|angel|arrow)/g
-----------------------------------------------------------^ here
每个由
|
管道
|
分隔的项目都可能与
msg.replace()
匹配。向
smileys
对象添加更多项时,还必须向正则表达式添加更多组

您可以这样做以避免:

function smilyMe(msg) {
    msg = msg.replace(/(?:\r\n|\r|\n)/g, '<br />');

    for (var key in smileys) {
        msg = msg.replace(key, smileys[key]);
    }

    return msg;
}
函数smilyMe(msg){
msg=msg.replace(/(?:\r\n |\r |\n)/g,“
”); for(smileys中的var键){ msg=msg.replace(key,smileys[key]); } 返回味精; }

编辑:以上实现为您提供了一个解决方案。

使用for在对象中循环使用笑脸,这样您只需定义一次。 以下是代码的工作示例:

function smilyMe(msg) {
    msg = msg.replace(/(?:\r\n|\r|\n)/g, '<br />');

    for (var key in smileys) {
        msg = msg.replace(key, smileys[key]);
    }

    return msg;
}
function smilyMe(msg) {
  for (var key in smileys) {

      var match = new RegExp(key.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), "g");
      msg = msg.replace(match, smileys[key]);

   }
  return msg
}