javascript - 如何找到unicode组合?

标签 javascript

我有一些表情符号,例如 (👩‍💻 👨‍💻 🇧🇬 🇧🇸 ) 这个。我正在为每个表情符号添加一个 span。我有一个处理代码将其转换为 span 这里是将转换为 span

的函数
emojiSpan = function (emojis) {
  if (!emojis)
    return;
  try {
    let emojiSpan;
    var unicodeMatch = /([\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2694-\u2697]|\uD83E[\uDD10-\uDD5D])/g;
    if (emojis.match(unicodeMatch)) {
      emojis.match(unicodeMatch).filter(function (unicode) {
        if (unicode.trim().length === 1) return emojis;
        emojiSpan = _getEmojiSpan(unicode);
        emojis = Utility.replaceAll(emojis, unicode.trim(), emojiSpan);
      });
    }
  } catch (error) {
    console.error("Error while parsing emoji", error.stack);
  }
  return emojis;
};

var _getEmojiSpan = function(emoji){
if(!emoji)
  return;
return `<span class="emojiNative">${emoji}</span>`;  
}

在这里,输入是 👩‍💻 👨‍💻 🇧🇬 🇧🇸,我得到的输出如下

<span class="emojiNative">👩</span>‍
<span class="emojiNative">
  <span class="emojiNative">💻</span>
</span>
<span class="emojiNative">👨</span>‍
<span class="emojiNative">
  <span class="emojiNative">💻</span>
</span>
<span class="emojiNative">
  <span class="emojiNative">🇧</span>
</span>
<span class="emojiNative">🇬</span>
<span class="emojiNative">
  <span class="emojiNative">🇧</span>
</span>
<span class="emojiNative">🇸</span>

表情符号正在分离。我怎样才能得到准确的表情符号?请帮助我。

预期的输出是

<span class="emojiNative">👩‍💻</span>‍
<span class="emojiNative">👨‍💻</span>
<span class="emojiNative">🇧🇬</span>
<span class="emojiNative"> 🇧🇸 </span>
   

最佳答案

“合并”为一个的表情符号,例如男性/女性程序员,由零宽度连接器 U+200D 分隔。您可以将正则表达式扩展为看起来像 [emoji](?:\u200D[emoji])* 以添加对组合表情符号的支持。

至于旗帜,这些旗帜是由两个拼写国家代码的区域指标制成的。这些指标在一个固定范围内,所以当您找到该范围时,您可以检查是否有两个指标,如果有则将它们放在一起:

(?:\uD83C[\uDDE6-\uDDFF]){2}

确保它正则表达式的其他 \uD83C 部分之前。

emojiSpan = function (emojis) {
  if (!emojis)
    return;
  try {
    var unicodeMatch = /(?:\uD83C[\uDDE6-\uDDFF]){2}|(?:[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2694-\u2697]|\uD83E[\uDD10-\uDD5D])(?:\u200D(?:[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2694-\u2697]|\uD83E[\uDD10-\uDD5D]))*/g;
    emojis = emojis.replace(unicodeMatch, '<span class="emojiNative">$&</span>');
  } catch (error) {
    console.error("Error while parsing emoji", error.stack);
  }
  return emojis;
};

var _getEmojiSpan = function(emoji){
if(!emoji)
  return;
return `<span class="emojiNative">${emoji}</span>`;  
}
document.body.innerHTML += emojiSpan("👩‍💻 👨‍💻 🇧🇬 🇧🇸");

关于javascript - 如何找到unicode组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52036084/

相关文章:

javascript - 无法删除文件,因为它正被另一个进程 ASP.NET Core MVC 使用

javascript - AngularJS 如何实现滑动翻页动画?

javascript - JS console.log() 显示我的函数遍历了所有 if 语句,但被操作的元素没有改变

javascript - 返回 "last" Angular 中链式 promise 的值

javascript - 当用户滚动时更改 div 的不透明度

javascript - 输入框中的 Angularjs 货币格式

javascript - 我是如何丢失 JavaScript 内置对象和所有全局变量的?

javascript - 从被调用函数调用 javascript 函数(在原始函数中)?

javascript - $state.go() 不路由到其他状态,url 中的 #/null

javascript - NodeJS 是否为每个请求创建一个新线程?