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