【问题标题】:How to find the unicode combinations?如何找到 unicode 组合?
【发布时间】:2018-08-27 09:15:44
【问题描述】:

我有一些表情符号,例如 (??????‍???? ????‍?????? ???????? ???????? )this。我正在为每个表情符号添加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>
   

【问题讨论】:

  • 不清楚是什么问题。究竟什么是分离?你期望什么输出?你如何在你的例子中输入你的方法?
  • 我也添加了 expeted 输出

标签: javascript


【解决方案1】:

“合并”成一个表情符号,例如男性/女性程序员,由零宽度连接器 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("?‍? ?‍? ?? ??");

【讨论】:

  • 感谢您的回答,它运行良好,我需要一点帮助,我的正则表达式在此 url missive.github.io/emoji-mart 中找不到一些表情符号。你能提供一个能找到所有表情符号的正则表达式吗?请帮帮我
  • 因为表情符号总是被添加...不,抱歉。反正不是免费的。
  • 嗨,我怎么能用这个正则表达式 unicodeMatch /[\u{1f300}-\u{1f5ff}\u{1f900}-\u{1f9ff}\u{1f600}-\u{1f64f}\u{1f680}-\u{1f6ff}\u{2600}-\u{26ff}\u{2700}-\u{27bf}\u{1f1e6}-\u{1f1ff}\u{1f191}-\u{1f251}\u{1f004}\u{1f0cf}\u{1f170}-\u{1f171}\u{1f17e}-\u{1f17f}\u{1f18e}\u{3030}\u{2b50}\u{2b55}\u{2934}-\u{2935}\u{2b05}-\u{2b07}\u{2b1b}-\u{2b1c}\u{3297}\u{3299}\u{303d}\u{00a9}\u{00ae}\u{2122}\u{23f3}\u{24c2}\u{23e9}-\u{23ef}\u{25b6}\u{23f8}-\u{23fa}]/gu
  • 该正则表达式使用 Unicode 代码点,您必须将其转换为 UTF-16 代理对。
  • 是的。但是,它几乎可以找到我拥有的所有 unicodes
猜你喜欢
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多