- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须用 javascript 编写一个模块,它可以检测表情符号并用带有图像链接的 div 标签替换每个表情符号。
(表情符号是 :) :-) 等形式的字符串)
问题是我有数百个,尝试编写一个正则表达式来捕获所有这些并不是一个好主意。
有没有办法做到这一点,因为我有一个散列图,其中键是表情符号字符串,值是十六进制值。 (所有表情都在一个范围内)
谢谢!
已编辑:所以也许我陈述问题的方式并不清楚。假设您有一本包含 100000 个单词的字典,每个单词包含 4-5 个字符。和一行流,每行包含 100 - 150 个字符。你会如何找到这些行中的单词?
最佳答案
不幸的是,Javascript 字符串是16 位 无符号整数代码点的序列,通常表示Unicode 字符串的UTF-16 编码。因此,BMP 之外的 Unicode 字符(从 U+10000
开始的代码点)表示为代理对,每个代理对都是两个“字符”长。这在正则表达式中是可见的;如果要匹配,比如U+1F623
("PERSEVERING FACE"),则需要匹配\uD83D\uDE23
。
虽然很烦人,但这并非完全不切实际。范围仍然很容易匹配。例如,假设您认为表情符号在 U+1F300...U+1F64F
范围内,这是 http://www.unicode.org/Public/UNIDATA/EmojiSources.txt 处的表情符号转录数据中列出的大部分但不是全部字符。 ,那么你可以使用正则表达式:
/\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F]/
要计算这些代码,您需要了解从非 BMP Unicode 代码点到两个代理字符的映射。没那么复杂 :) 首先,从 Unicode 代码点中减去 U+10000
(UTF-16 的设计者选择避免在已经适合 16 位的代码点上浪费代码空间)。这给您留下了一个 20 位数字,因为最大的有效 Unicode 代码点是 U+10FFFF
。现在,您需要将该 20 位数字分成两个 10 位 block 。高10位加到U+D800
上形成第一个代理码,低10位加到U+DC00
上形成第二个代理码代理人。
使用 PERSEVERING FACE 示例:
U+1F623 => 0F623 (subtract 0x10000)
=> 0000 1111 0110 0010 0011 (in binary)
=> 00 0011 1101, 10 0010 0011 (two 10-bit chunks)
=> 03D, 223 (back to hex)
=> D83D, DE23 (add D800 to first and DC00 to second)
如果您有 bash
和 iconv
实用程序,让您的计算机进行这些计算的“简单”方法是:
printf $'\U1F623\U1F3A9' |
iconv -f utf8 -t utf16le | hexdump -e '8/2 "%04x " "\n"'
(我将其分成两行显示,但您可以将其作为一行输入。您可以将任意多的代码放入传递给 printf
的字符串中。)
关于javascript - 在 javascript 中捕获表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24878131/
我遇到了 Handlebars 表达式 {{!< default}}我不明白。在问这个问题之前,我曾尝试在谷歌上搜索答案。但是,我找不到任何答案。谁能解释一下这个表达式是什么意思? 最佳答案 在 Ha
经常有朋友问起,如何在im即时通讯中实现发送图片、视频、语音和表情? 为此,小编特意写了一个vue版本的demo,实现了图片视频文件和表情的的发送,参考这个demo源代码,相信你就可以轻松的用un
这里是一个网站 ( https://twitchemotes.com/apidocs ),它展示了一个用于获取 twitch 表情的 API(基本上是描述属于不同用户的一组图像的 json)。 API
使用 Python 3,像下面这样的简单脚本应该按预期运行,但似乎会因 unicode 表情字符串而窒息: import re phrase = "(╯°□°)╯ ︵ ┻━┻" pattern = r
我试图弄清楚表情符号(表情)选择是如何在 Facebook 应用和 Google Hangouts 应用上实现的。我查看了 Android API 示例中的 SoftKeyboard 演示应用程序,但
我正在尝试在 android 通知文本中显示笑脸(或图像范围)。它不起作用。有人知道怎么做吗?谢谢。 代码如下: SpannableStringBuilder builder = new Spanna
我是一名优秀的程序员,十分优秀!