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

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


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.


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-splitterYou are likely to miss edge-cases in any home-brew solution. This one is actually based on the UAX-29 Unicode standart