我使用EmojiMart作为解析器。
我见过这个相关问题,但它似乎和我的不一样。
因此,我需要返回表情符号名称或: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:之间的空格)
条件:
只有当肤色为2-6时,它才能与:code::skintone:相匹配。
如果我做了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:发布于 2018-07-13 12:39:38
您可以将String#split()与
/(:[^\s:]+(?:::skin-tone-[2-6])?:)/regex。见regex演示。
详细信息
: -一个冒号[^\s:]+ - 1+字符,而不是空格和:(?:::skin-tone-[2-6])? -一个可选的序列::skin-tone- -一个文字子字符串[2-6] -从2到6的数字
: -一个冒号.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; })。
https://stackoverflow.com/questions/51325143
复制相似问题