通过使用正则表达式的拆分函数拆分表情符号字符串

时间:2017-05-19 06:06:31

标签: javascript regex unicode emoji

我想使用Javascript的split函数来分割表情符号字符串。在stackoverflow中有很多这样的问题,但我找不到任何已完成的解决方案。所以我按照自己的方式做到了:

a)使用带有正则表达式的split函数。

b)通过正则表达式unicode匹配拆分表情符号字符:从\ uD800到\ uDBFF,从\ uDC00到\ uDFFF。

c)在此正则表达式中,排除零加盟(\ u200D)和变体选择器(\ uFE0F)字符。 所以我写了如下:

var p = '‍‍‍‍❤️‍‍';

并拆分:

var split = p.split(/(?![\u200D\uFE0F])([\uD800-\uDBFF][\uDC00-\uDFFF])/);

但结果是错误的:(

["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "‍", "", "‍", "", "‍", "", "", "", "", "", "", "", "‍❤️‍", "", "‍", "", ""]

我是否正在使用排除选择器进行正则表达式?如果对,我的想法引起的错误? 预期结果必须是:[“”,“”,“”,“”,“”,“”,“”,“”,“❤️”]

===

我想更新信息。我为我的网站解决了这个问题:https://www.emojionline.org。你可以测试一下。我只是使用一个包含所有表情符号的字典,我使用替换功能用| emoji |替换每个表情符号。我可以通过符号分割字符串表情符号。这很好用:))

1 个答案:

答案 0 :(得分:3)

我通过Mathias Bynens扩展了emoji-regex一点PassVariable() { echo $1 # Print first parameter } PassVariable "$OrderID" 替代方案。它匹配一个普通的2字节表情符号,后面跟着两个或多个序列(这可以通过[\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}限制量词来控制)零宽度连接符或变体选择器以及常见的2字节表情符号字符。

如果没有替代方案,结果为{2,}

[ '','','','','','‍‍','','','','‍❤️‍‍' ]