【发布时间】:2017-10-19 03:23:02
【问题描述】:
我想使用 Javascript 的拆分功能来拆分表情符号字符串。在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|。我可以按符号 | 分割字符串表情符号。效果很好:)
【问题讨论】:
-
但是错了!!!它们不适用于连接符号。例如上面的家庭符号,结果将是 4 个单独的符号,但它只需要一个符号!
-
我使用了这个例子。然而,正如我上面所说,这个函数将每个符号分开。它不在乎许多符号被连接到一个符号中,例如上面的家庭符号。
-
这就是为什么你应该匹配,而不是split。
-
如何使用?我的意思是如何编写正则表达式?我使用上面的 match 拆分,但结果是一样的。
-
不,肯定正则表达式必须不同。我没有得到要求。请注意,
????????表情符号由 4 个字节组成 -\uD83D\uDC66\uD83C\uDFFC。因此,您将其匹配为 2 个元素,因为您每次只匹配 2 个字节与您的模式。
标签: javascript regex unicode emoji