How can I split a string containing emoji into an array?

a 夏天 提交于 2019-11-28 06:58:19

The grapheme-splitter library that does just that, is fully compatible even with old browsers and works not just with emoji but all sorts of exotic characters: https://github.com/orling/grapheme-splitter You are likely to miss edge-cases in any home-brew solution. This one is actually based on the UAX-29 Unicode standart

forresto

Edit: see Orlin Georgiev's answer for a proper solution in a library: https://github.com/orling/grapheme-splitter


Thanks to this answer I made a function that takes a string and returns an array of emoji:

var emojiStringToArray = function (str) {   split = str.split(/([\uD800-\uDBFF][\uDC00-\uDFFF])/);   arr = [];   for (var i=0; i<split.length; i++) {     char = split[i]     if (char !== "") {       arr.push(char);     }   }   return arr; }; 

So

emojiStringToArray("😴😄😃⛔🎠🚓🚇") // => Array [ "😴", "😄", "😃", "⛔", "🎠", "🚓", "🚇" ] 

JavaScript ES6 has a solution!, for a real split:

[..."😴😄😃⛔🎠🚓🚇"] // ["😴", "😄", "😃", "⛔", "🎠", "🚓", "🚇"] 

Yay? Except for the fact that when you run this through your transpiler, it might not work (see @brainkim's comment). It only works when natively run on an ES6-compliant browser. Luckily this encompasses most browsers (Safari, Chrome, FF), but if you're looking for high browser compatibility this is not the solution for you.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!