javascript - 正则表达式查找带有冒号和肤色的表情符号名称

标签 javascript arrays regex emoji emoji-tones

我正在使用 EmojiMart对于我的解析器。

我看过这个related question但它似乎与我的不同。

所以我需要返回表情符号名称或 :code: 以便他们能够对其进行解码。

例如我有这个文本:

:+1::skin-tone-6::man-pouting:Hello world:skin-tone- 
6:lalalalla:person_with_pouting_face: :poop::skin-tone-11: mamamia 
:smile: :skin-tone-6:

它应该匹配整个 :+1::skin-tone-6: 而不是单独的 :+1:, :skin-tone-6:: - 仅当它们之间没有空格时。 (注意 :smile::skin-tone-6: 之间的空格)

条件:

它应该只匹配 :code::skintone: 如果肤色是 2-6

如果我执行 str.split(regex) 这是我的预期结果(数组):

- :+1::skin-tone-6:
- :man-pouting:
- Hello world
- :skin-tone-6:
- lalalalla
- :person_with_pouting_face: 
- :poop:
- :skin-tone-11: 
-  mamamia 
- :smile: 
- :skin-tone-6:

最佳答案

您可以将 String#split()

一起使用
/(:[^\s:]+(?:::skin-tone-[2-6])?:)/

正则表达式。查看regex demo .

详情

  • : - 冒号
  • [^\s:]+ - 除了空格和 :
  • 之外的 1+ 个字符
  • (?:::skin-tone-[2-6])? - 一个可选的序列
    • ::skin-tone- - 文字子串
    • [2-6] - 从 26
    • 的数字
  • : - 冒号。

JS 演示:

var s = ":+1::skin-tone-6::man-pouting:Hello world:skin-tone-6:lalalalla:person_with_pouting_face: :poop::skin-tone-11: mamamia :smile: :skin-tone-6:";
var reg = /(:[^\s:]+(?:::skin-tone-[2-6])?:)/;
console.log(s.split(reg).filter(x => x.trim().length !=0 ));

.filter(x => x.trim().length !=0 ) 从结果数组中移除所有空白项。对于 ES5 和更早版本,使用 .filter(function(x) { return x.trim().length != 0; })

关于javascript - 正则表达式查找带有冒号和肤色的表情符号名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325143/

相关文章:

javascript - React.js document.querySelectorAll() 不返回任何内容

C 编程 - 反转字符串

C-Compiler 在将字符串分配给 char 数组时说 "Cannot convert char * to char"

java - 如何在java中用 "\"替换 "\\"

javascript - 在选择多个复选框时将属性附加到变量

javascript - Web 服务、WCS、WFS、WMS(地理服务器)等的单点登录

javascript - 数组在拼接后不会改变它的数据。范围问题?

regex - 删除前导零但不是全零

javascript - 有人可以帮我在 javascript 中将字符串转换为对象吗

javascript - 如何使用 javascript 为具有相同类/名称的元素集合触发 css 事件