2014-07-02 3 views
8

(Sie benötigen Firefox oder Safari, um die Emoji im Code zu sehen.)Wie kann ich eine Zeichenfolge, die Emoji enthält, in ein Array aufteilen?

Ich möchte eine Zeichenfolge von Emoji nehmen und etwas mit den einzelnen Zeichen tun.

In JavaScript "⛔".length == 13 weil "⛔" Länge 1 ist, der Rest 2. So können wir nicht

s = string.split(""); 
c = []; 
c[0] = s[0]+s[1]; 

Hier ist, was ich gemacht: emoji poster

+1

http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols –

Antwort

15

Edit: siehe Orlin Georgiev's answer für eine geeignete Lösung in einer Bibliothek: https://github.com/orling/grapheme-splitter


Dank this answer habe ich eine Funktion, die einen String und gibt ein Array von Emojis nimmt:

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 [ "", "", "", "⛔", "", "", "" ] 
+3

, dass dies nicht funktioniert für Emoji, die Null-Breiten-Joiner verwenden , Variation Selectors, oder die KeyCap Emoji, die Ziffern + KeyCap + Variation Selector sind – Beau

+0

Verwenden Sie einfach die 'match' Methode' str.match (/ ([\ uD800- \ uDBFF] [\ uDC00- \ uDFFF]) /); ' und es wird die Emojis –

+0

Ich habe versucht, Sie funktionieren, und es funktioniert für mich, aber sieh dir das an: emojiStringToArray ("⛔❤️❤️❤️❤️❤️❤️") // => Array ["", "", "", "⛔", "", "", "", "❤️❤️❤️❤️❤️❤️"] Wissen Sie, wie Sie das lösen können? ror? –

4

JavaScript ES6 hat eine Lösung !, für ein echtes Split:

[..."⛔"] // ["", "", "", "⛔", "", "", ""] 

Yay? Bis auf die Tatsache, dass es beim Ausführen durch den transpiler möglicherweise nicht funktioniert (siehe @ brainkims Kommentar). Es funktioniert nur, wenn es nativ auf einem ES6-kompatiblen Browser ausgeführt wird. Zum Glück umfasst dies die meisten Browser (Safari, Chrome, FF), aber wenn Sie nach einer hohen Browser-Kompatibilität suchen, ist dies nicht die Lösung für Sie.

+1

Babel mit es6-Einstellungen wird dies in einen Aufruf von String's Iterator-Funktion transpilieren, so dass es in einigen transpilers funktioniert. – brainkim

+0

@brainkim Ich habe das in der Antwort angegeben. Es ist die Schuld des Transpilers, dass er den Standard auf dieser – Downgoat

+0

nicht erfüllt. Ah, ich sage, dass es manchmal funktioniert. "Wenn du das durch deinen Transpiler läufst, wird es nicht funktionieren" bedeutet, dass es nie funktioniert. Es hängt davon ab, welche spezifischen Emojis in der Zeichenkette, dem Transpiler, den du verwendest usw. – brainkim

3

Die Graphem-Splitter-Bibliothek, die genau das tut, ist kompatibel auch mit alten Browsern und arbeitet nicht nur mit Emoji aber allerlei exotischer Zeichen: https://github.com/orling/grapheme-splitter Sie sind wahrscheinlich kanten Fälle in jedem Heim-Gebräu verpassen Lösung. Dieser basiert auf dem UAX-29 Unicode Standart

+0

Das ist großartig! – Clay

Verwandte Themen