比如最常见的表情符号:),如果用图片表示的话就是

这种转换的背后需要一种映射关系,需要由代码完成解析工作,在网页聊天中非常常见,这里贴一下部分核心代码,在

使用ExtJS实现的WebQQ聊天(仿Lync界面)

中使用到

Ext.define('Tulip.messenger.SmileyParser', {mixins: {observable: 'Ext.util.Observable'},singleton: true,re: RegExp("(:\\-?\\)|:\\-?\\}|:\\-?\\]|:\\-\\\\|;\\-?\\\\|:\\-?[Ss]|:\\-?\\||:'\\-?\\||:\\-?[\\(<]|:\\-?[Dd>]|<:o\\)|<[oO]\\)|:\\-?[oO]|:\\-?[pP]|:\\-?\\[|:'\\(|:\\-?@|;\\-?@|:\\-?\\$|:\\-#|:\\-\\*|:\\^\\)|;\\-?\\)|8o\\||8\\-\\)|8\\-\\||\\^o\\)|\\*\\-\\)|\\*\\-?\\\\|\\*\\-?\\||\\+o\\(|\\|\\-\\)|\\([a-pA-Pr-vR-VwWx-zX-Z]\\)|\\([~\\\\*068@#&\\^\\{\\}]\\)|\\(\\|\\|\\)|\\('\\.'\\)|\\*p\\*|\\*s\\*|<3|:8\\)|\\r\\n|\\r|\\n|((http|https):\\/\\/|\\/www|www\\.)[^\\s]*[^\\s?.!(;:'>\\[\\],])"),descriptors: [ // Matrix 8 (Row) * 10 (Column)/** 0 ~ 9 **/{name:'Smiley', code:':)'},{name:'Open-mouthed smiley', code:':d'},{name:'Winking smiley', code:';)'},{name:'Surprised smiley', code:':-o'},{name:'Smiley with tongue out', code:':p'},{name:'Hot smiley', code:'(h)'},{name:'Angry smiley', code:':@'},{name:'Confused smiley', code:':s'},{name:'Embarrassed smiley', code:':$'},{name:'Sad smiley', code:':('},/** 10 ~ 19 **/{name:'Crying face', code:':’('},{name:'Disappointed Smiley', code:':|'},{name:'Storm cloud', code:'(st)'},{name:'Baring teeth smiley', code:':o8'},{name:'Nerd smiley', code:'8-|'},{name:'Sick smiley', code:'+o('},{name:'Party smiley', code:'<:o)'},{name:'Sleepy smiley', code:'(s)'},{name:'Thinking smiley', code:'*-)'},{name:'Don’t tell anyone smiley', code:':-#'},/** 20 ~ 29 **/{name:'Secret telling smiley', code:':-*'},{name:'Sarcastic smiley', code:'^o)'},{name:'Eye-rolling smiley', code:'8-)'},{name:'Red heart', code:'(l)'},{name:'Broken heart', code:'(u)'},{name:'Drinks', code:'(d)'},{name:'Beer', code:'(b)'},{name:'Cat face', code:'(@)'},{name:'Dog face', code:'(&)'},{name:'Snail', code:'(sn)'},/** 30 ~ 39 **/{name:'Black sheep', code:'(bah)'},{name:'Sleeping half-moon', code:'(s)'},{name:'Star', code:'(*)'},{name:'Sun', code:'(#)'},{name:'Rainbow', code:'(r)'},{name:'Left hug', code:'({)'},{name:'Right hug', code:'(})'},{name:'Red lips', code:'(k)'},{name:'Red rose', code:'(f)'},{name:'Wilted rose', code:'(w)'},/** 40 ~ 49 **/{name:'Clock', code:'(o)'},{name:'Gift box with bow', code:'(g)'},{name:'Birthday cake', code:'(^)'},{name:'Camera', code:'(p)'},{name:'Lightbulb', code:'(i)'},{name:'Coffee cup', code:'(c)'},{name:'Telephone receiver', code:'(t)'},{name:'Mobile phone', code:'(mp)'},{name:'Auto', code:'(au)'},{name:'Airplane', code:'(ap)'},/** 50 ~ 59 **/{name:'Computer', code:'(co)'},{name:'Money', code:'(mo)'},{name:'Filmstrip', code:'(~)'},{name:'Music Note', code:'(8)'},{name:'Pizza', code:'(pi)'},{name:'Soccer', code:'(so)'},{name:'Email icon', code:'(e)'},{name:'Boy', code:'(z)'},{name:'Girl', code:'(x)'},{name:'Island with palm tree', code:'(ip)'},/** 60 ~ 69 **/{name:'Umbrella', code:'(um)'},{name:'It’s a deal', code:'(ok)'},{name:'Stop', code:'(!)'},{name:'Confidential/key', code:'(qt)'},{name:'Let’s meet', code:'(s+)'},{name:'I agree', code:'(y)'},{name:'I disagree', code:'(n)'},{name:'Can you talk', code:'(!!)'},{name:'Bye', code:'(bye)'},{name:'Working from home', code:'(@h)'},/** 70 ~ 79 **/{name:'Hold on', code:'(w8)'},{name:'Good luck', code:'(gl)'},{name:'Can I call you?', code:'(cic)'},{name:'Online', code:'(ol)'},{name:'Busy', code:'(busy)'},{name:'Do Not Disturb', code:'(dnd)'},{name:'Working on it', code:'(woi)'},{name:'What’s going on?', code:'(!!?)'},{name:'Gotta run', code:'(gtr)'},{name:'Games', code:'(ply)'}],smileyIconMap: {},constructor: function(config) {var me = this;me.mixins.observable.constructor.call(me, config);me.initSmileyMap();},replaceEmoticons: function(text, outText) {this.translate(text, outText, false)},/** 把代码换成图片;创建超链接*/translate: function(text, outText, link, type) {var me = this; //, outText = [];for (; 0 < text.length;) {var end = false;text.replace(me.re, function(matched, g, h, i, j) {0 < j && (matched = text.substring(0, j), outText.push(matched));switch (g) {case "\r\n":case "\r":case "\n":outText.push("<br>");break;default:g.substr(0, 4)=="http" || g.substr(0, 3)=="www" ? link ? (matched = me.createLink(g, outText), outText.push(matched)) : outText.push(g) : g.substr(0, 4)=="/www" ? outText.push(g) : (matched = me.createSmiley(g, type), null == matched ? outText.push(g) : outText.push(matched))}text = text.substring(j + g.length);end = true;return ''});end || (outText.push(text), text = '')}},createLink: function(url, outText) {var urlName = url;outText.push('<a href="');url.substr(0, 7)!="http://" && url.substr(0, 8)!="https://" && (url = "http://" + url);outText.push(url, '" target=_blank>', urlName, '</a>');},createSmiley: function(code) {var me = this, imgHtml = [], imgName = me.smileyIconMap[code.toLowerCase()];if (imgName == null || imgName == undefined) return null;imgHtml.push('<img class="face" width="19" height="19" title="Rainbow (r)" alt="(r)" src="/tulip/resources/images/lync/smiley/',imgName, '.gif">');return imgHtml.join('')},initSmileyMap: function() {var me = this;me.smileyIconMap[":)"] = me.smileyIconMap[":-)"] = "1";me.smileyIconMap[":d"] = me.smileyIconMap[":-d"] = me.smileyIconMap[":>"] = me.smileyIconMap[":->"] = "2";me.smileyIconMap[";)"] = me.smileyIconMap[";-)"] = "3";me.smileyIconMap[":o"] = me.smileyIconMap[":-o"] = "4";me.smileyIconMap[":p"] = me.smileyIconMap[":-p"] = "5";me.smileyIconMap["(h)"] = "6";me.smileyIconMap[":@"] = me.smileyIconMap[":-@"] = "7";me.smileyIconMap[":$"] = me.smileyIconMap[":-$"] = me.smileyIconMap[":s"] = me.smileyIconMap[":-s"] = "8";me.smileyIconMap[":("] = me.smileyIconMap[":-("] = me.smileyIconMap[":<"] = me.smileyIconMap[":-<"] = "9";me.smileyIconMap[":'("] = "10";me.smileyIconMap[":|"] = me.smileyIconMap[":-|"] = "11";me.smileyIconMap["(6)"] = "12";me.smileyIconMap["(a)"] = "13";me.smileyIconMap["(l)"] = me.smileyIconMap["<3"] = "14";me.smileyIconMap["(u)"] = "15";me.smileyIconMap["(@)"] = "16";me.smileyIconMap["(&)"] = "17";me.smileyIconMap["(s)"] = "18";me.smileyIconMap["(*)"] = "19";me.smileyIconMap["(~)"] = "20";me.smileyIconMap["(8)"] = "21";me.smileyIconMap["(e)"] = "22";me.smileyIconMap["(f)"] = "23";me.smileyIconMap["(w)"] = "24";me.smileyIconMap["(o)"] = me.smileyIconMap["(0)"] = "25";me.smileyIconMap["(k)"] = "26";me.smileyIconMap["(g)"] = "27";me.smileyIconMap["(^)"] = "28";me.smileyIconMap["(p)"] = "29";me.smileyIconMap["(i)"] = "30";me.smileyIconMap["(c)"] = "31";me.smileyIconMap["(t)"] = "32";me.smileyIconMap["({)"] = "33";me.smileyIconMap["(})"] = "34";me.smileyIconMap["(b)"] = "35";me.smileyIconMap["(d)"] = "36";me.smileyIconMap["(z)"] = "37";me.smileyIconMap["(x)"] = "38";me.smileyIconMap["(y)"] = "39";me.smileyIconMap["(n)"] = "40";me.smileyIconMap["(ok)"] = "62";}
});

用正则表达式将文字转换成表情图片相关推荐

  1. 使用正则表达式把IM聊天中的自定义表情格式转换成表情图片

    最近在做一个IM聊天项目,这个项目中也涉及到了发送表情的需求,就正好去研究了一下正则表达式,现在就和大家分享一下一个简单的demo(若有更简便的方法,希望各位朋友能指点哈) 先看看效果图 1.自己新建 ...

  2. html怎么在图片上加文字_怎么把图片文字转换成word文档

    我们在和别人交流的时候,有时候为了方便对方查看和理解,我们会使用文字图片进行交流,这是一种非常方便交流的形式.那如果我们想要将图片里的文字转换成Word文档应该怎么操作? 如果我们想要将图片识别为Wo ...

  3. 如何将图片文字转换成文本?

    不少小伙伴都会以图片格式记录着文字信息,比如把重要的内容拍下来.各种类型的票据或者对文档的内容截图等,而拍照无疑是可以快速记录的方法,还不容易出错,只是在后续的整理图片和文字会花比较长的时间.如果有可 ...

  4. 如何把图片上的文字转换成word?

    有的图片上是有文字的,我们可以将图片上的文字转换成Word文档,那么我们是怎么进行在线转换的?下面小编简单给大家介绍一下. 步骤一:我们可以将这些带有文字的图片放在桌面上,将这些需要转换的图片进行保存 ...

  5. 怎么把图片文字转换成word文档?介绍一个方法

    怎么把图片文字转换成word文档?这类问题在我们整理查找资料时最常见,因为很多信息都以图片形式展示了出来,我们在归纳时如果将其转换成文字在转成Word,就更易于日后编辑查看.而今天跟大家分享的是直接将 ...

  6. 图片上的文字转换成word-捷速OCR文字识别

    图片上的文字转换成word-捷速OCR文字识别 这几天公司需要我将一片旅游书籍上的几篇关于旅游的文章进行编辑,做一个相关方面的专题,这可就烦到我了,专题方面的设计对我来说并不难,难的就是我必须把那几篇 ...

  7. 如何把图片上面的文字转换成word-OCR文字识别软件

    解析如何把图片上面的文字转换成word 有没有小伙伴们为百度文库里面的资源下载需要下载券感到坑爹,特别是现下下载资源紧缺,各个网站配合网打的行动,导致很多优秀网站现在没法下载资源,尤其是新浪爱问共享资 ...

  8. 使用text2image将文字转换成图片

    text2image是一款将文字转换成图片的工具 官网:http://www.text2image.com/pit_t2i/saver 在做tesseract图片识别时需要基础数据采样 文档参考: h ...

  9. 识别图片文字转换成word文字真的很难吗?分享图片转文字的技巧

    在我们日常办公中,图片转文字.图片转 word 文字运营的十分广泛,并且使用起来非常节约时间,但要是说如何快速的实现图片转文字,相信很多人就不知道了,下面分享便捷的图片转文字的方法介绍,有需要的朋友可 ...

最新文章

  1. 安卓设置菊花动画_Android Progressbar自定义菊花效果
  2. 【编程4】插入排序+快速排序+LeetCode.148(排序链表)
  3. 微信小程序开发必看,《使用 .NET Core + DevOps 开发微信跨平台应用》,苏州.NET俱乐部课程分享...
  4. 零元学Expression Design 4 - Chapter 5 教你如何用自制笔刷在5分钟内做出设计感效果...
  5. log4j控制日志输出文件名称的两种方式
  6. Spring Tool Suite 错误: Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds.
  7. Python 之 循环
  8. Hive增加一列固定值
  9. Python爬虫爬取快代理上的免费代理
  10. 软件工程-项目管理-时间管理/进度管理
  11. c#万能视频播放器(附代码)
  12. sqlmap自动化注入工具使用浅析
  13. 禅道如何设置邮箱提醒
  14. 谷歌浏览器自定义标签页 newtab
  15. matlab x的平均值符号怎么打出来,教你在Word中输入平均数的符号X上加一横(X拔)...
  16. 百度Al在线语音合成(简单版)
  17. CTF-网络信息安全攻防学习平台(注入关)
  18. 嵌入式读书列表 - 参考
  19. C语言程序之经典习题:运输公司对用户计算运输费用。路程(s/km)越远,每吨/千米运费越低。
  20. 如何让if(a==1a==2)条件成立

热门文章

  1. 单片机编程:如何喂狗的灵魂拷问...
  2. 基于java实现bilibili视频爬虫
  3. 微信小程序跳转公众号(引导关注)之 使用公众号消息
  4. 2014年10月23日(账本软件)
  5. Apache Calcite 论文翻译
  6. Word怎样设置处理表格与表格标题之间的间距问题
  7. Centos7 下搭建小幺鸡接口管理工具
  8. htc legend 升级到 android 2.2 froyo 后,输入法问题
  9. 智能手机低价成潮,vivo为何执念高端?
  10. PLSQL无客户端连接ORACLE