vue 微信表情符号替换成相应表情图片

485 阅读1分钟

最近公司需要开发一套客服聊天系统,其功能是用户在公众号转人工客服后与工作人员进行聊天沟通,需要前端这边将公众号发送的普通表情展示在后台的聊天信息中。

步骤一:准备好微信表情的素材图片

我是从公众号内部copy了一套 不嫌弃的话可以拿来用 链接:pan.quark.cn/s/62685a667… 提取码:dtvT

步骤二:做好一个表情符号的对照表

如果你没弄的话 可以拿来用 由于我的表情素材图标存在本地是中文,所以你想使用英文命名的话得自己改改

[{"name":"[微笑]","code":"/::)",},{"name":"[撇嘴]","code":"/::~",},{"name":"[色]","code":"/::B",},{"name":"[发呆]","code":"/::|",},{"name":"[得意]","code":"/:8-)",},{"name":"[流泪]","code":"/::<",},{"name":"[害羞]","code":"/::$",},{"name":"[闭嘴]","code":"/::X",},{"name":"[睡]","code":"/::Z",},{"name":"[大哭]","code":"/::'(",},{"name":"[尴尬]","code":"/::-|",},{"name":"[发怒]","code":"/::@",},{"name":"[调皮]","code":"/::P",},{"name":"[呲牙]","code":"/::D",},{"name":"[惊讶]","code":"/::O",},{"name":"[难过]","code":"/::(",},{"name":"[囧]","code":"/:--b",},{"name":"[抓狂]","code":"/::Q",},{"name":"[吐]","code":"/::T",},{"name":"[偷笑]","code":"/:,@P",},{"name":"[愉快]","code":"/:,@-D",},{"name":"[白眼]","code":"/::d",},{"name":"[傲慢]","code":"/:,@o",},{"name":"[困]","code":"/:|-)",},{"name":"[惊恐]","code":"/::!",},{"name":"[憨笑]","code":"/::>",},{"name":"[悠闲]","code":"/::,@",},{"name":"[咒骂]","code":"/::-S",},{"name":"[疑问]","code":"/:?",},{"name":"[嘘]","code":"/:,@x",},{"name":"[晕]","code":"/:,@@",},{"name":"[衰]","code":"/:,@!",},{"name":"[骷髅]","code":"/:!!!",},{"name":"[敲打]","code":"/:xx",},{"name":"[再见]","code":"/:bye",},{"name":"[擦汗]","code":"/:wipe",},{"name":"[抠鼻]","code":"/:dig",},{"name":"[鼓掌]","code":"/:handclap",},{"name":"[坏笑]","code":"/:B-)",},{"name":"[右哼哼]","code":"/:@>",},{"name":"[鄙视]","code":"/:>-|",},{"name":"[委屈]","code":"/:P-(",},{"name":"[快哭了]","code":"/::'|",},{"name":"[阴险]","code":"/:X-)",},{"name":"[亲亲]","code":"/::*",},{"name":"[可怜]","code":"/:8*",},{"name":"[笑脸]","code":"[Happy]",},{"name":"[生病]","code":"[Sick]",},{"name":"[脸红]","code":"[Flushed]",},{"name":"[破涕为笑]","code":"[Lol]",},{"name":"[恐惧]","code":"[Terror]",},{"name":"[失望]","code":"[LetDown]",},{"name":"[无语]","code":"[Duh]",},{"name":"[嘿哈]","code":"[Hey]",},{"name":"[捂脸]","code":"[Facepalm]",},{"name":"[奸笑]","code":"[Smirk]",},{"name":"[机智]","code":"[Smart]",},{"name":"[皱眉]","code":"[Concerned]",},{"name":"[耶]","code":"[Yeah!]",},{"name":"[吃瓜]","code":"[Onlooker]",},{"name":"[加油]","code":"[GoForIt]",},{"name":"[汗]","code":"[Sweats]",},{"name":"[天啊]","code":"[OMG]",},{"name":"[Emm]","code":"[Emm]",},{"name":"[社会社会]","code":"[Respect]",},{"name":"[旺柴]","code":"[Doge]",},{"name":"[好的]","code":"[NoProb]",},{"name":"[打脸]","code":"[MyBad]",},{"name":"[哇]","code":"[Wow]",},{"name":"[翻白眼]","code":"[Boring]",},{"name":"[666]","code":"[Awesome]",},{"name":"[让我看看]","code":"[LetMeSee]",},{"name":"[叹气]","code":"[Sigh]",},{"name":"[苦涩]","code":"[Hurt]",},{"name":"[裂开]","code":"[Broken]",},{"name":"[嘴唇]","code":"/:showlove",},{"name":"[爱心]","code":"/:heart",},{"name":"[心碎]","code":"/:break",},{"name":"[拥抱]","code":"/:hug",},{"name":"[强]","code":"/:strong",},{"name":"[弱]","code":"/:weak",},{"name":"[握手]","code":"/:share",},{"name":"[胜利]","code":"/:v",},{"name":"[抱拳]","code":"/:@)",},{"name":"[勾引]","code":"/:jj",},{"name":"[拳头]","code":"/:@@",},{"name":"[OK]","code":"/:ok",},{"name":"[合十]","code":"[Worship]",},{"name":"[啤酒]","code":"/:beer",},{"name":"[咖啡]","code":"/:coffee",},{"name":"[蛋糕]","code":"/:cake",},{"name":"[玫瑰]","code":"/:rose",},{"name":"[凋谢]","code":"/:fade",},{"name":"[菜刀]","code":"/:pd",},{"name":"[炸弹]","code":"/:bome",},{"name":"[便便]","code":"/:shit",},{"name":"[月亮]","code":"/:moon",},{"name":"[太阳]","code":"/:sun",},{"name":"[庆祝]","code":"[Party]",},{"name":"[礼物]","code":"/:gift",},{"name":"[红包]","code":"[Packet]",},{"name":"[發]","code":"[Rich]",},{"name":"[福]","code":"[Blessing]",},{"name":"[烟花]","code":"[Fireworks]",},{"name":"[爆竹]","code":"[爆竹]",},{"name":"[猪头]","code":"/:pig",},{"name":"[跳跳]","code":"/:jump",},{"name":"[发抖]","code":"/:shake",},{"name":"[转圈]","code":"/:circle"}]

步骤三:取出所有表情的code值并对code值的特殊字符进行转义处理

<script>
        //导入准备好的对照表
        import emojiList from "@/utils/emoji";
	export default {
		data() {
			return {
                            emojiList,
			}
		},
                computed:{
                    emojiCodes(){
                          let codes = this.emojiList.map(obj =>this.replaceSpecial(obj.code)).join("|");
                          return codes;
                    },
                
                },
		created() {
			
		},
		methods: {
                        //对特殊字符进行转义处理
                        replaceSpecial(str) {
                              let specialRegex = /[\/()~|<$?*\[\]]/g;
                              let newStr = str.replace(specialRegex, function (match) {
                                return '\\'  + `${match}`;
                              });
                              return newStr
                        },
		}
	}
</script>

步骤四:将表情符号转为img展示

    replaceEmoji(str) {
      let regex = new RegExp(this.emojiCodes, "g");
      let replacedText = str.replace(regex, (match) => {
        // 根据匹配的表达式找到对应的对象,返回对应的表情字符
        const obj = this.emojiList.find(obj => obj.code === match);
        let msg = match
        if(obj){
          //替换自己的图片存放的位置
          let src = require(`@/assets/images/emoji/${obj.name}.png`)
          msg = `<img class="emojiMsg" alt="${obj.name}" src="${src}" />`
        }

        return msg;
      });
      console.log(replacedText);
      return replacedText
    },

TIP

流泪、右哼哼这两个表情因为后端没有返回表情符号 所以可能存在没解析出来的问题

希望这篇文章对你有所帮助