2016-04-22 21 views
6

Normalmente userei solo qualcosa come str[i].Come eseguire l'iterazione solo sui caratteri in una stringa che posso effettivamente vedere?

E se str = "☀️"?

str[i] fallisce. for (x of str) console.log(x) ha esito negativo. Stampa un totale di 4 caratteri, anche se ci sono chiaramente solo 2 emoji nella stringa.

Qual è il modo migliore per scorrere su ogni personaggio che posso vedere in una stringa (e newline, credo) e nient'altro?

La soluzione ideale restituirebbe un array di 2 caratteri: le 2 emoji e nient'altro. Il duplicato richiesto e un sacco di altre soluzioni che ho trovato non soddisfano questi criteri.

+2

penso che si dovrebbe verificare questo post del blog: [link] (https://mathiasbynens.be/ note/javascript-unicode) – msencer

+2

Possibile duplicato di [Dividi stringa JavaScript in array di codepoint? (tenendo conto delle "coppie surrogate" ma non "grapheme cluster")] (http://stackoverflow.com/questions/21397316/split-javascript-string-into-array-of-codepoints-taking-into-account-surrogat) –

+0

Stai dicendo che vuoi catturare l'emoji, o saltarci sopra e trovare il prossimo personaggio "normale"? – KevBot

risposta

0

È necessario creare i propri metodi per i personaggi astrali.

"foobar".match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|./g); 
// => ["f", "o", "o", "", "b", "a", "r"] 
+0

Questo non funziona in tutti i casi. Si consideri '" foob☀️ar ".match (/ [\ uD800- \ uDBFF] [\ uDC00- \ uFFFF] | ./g);'. – thedayturns

+0

@thedayturns: Sì, ho coperto solo i caratteri astrali, che è dove JavaScript "erroneamente" divide un singolo carattere Unicode in due caratteri JS.La stringa vuota contiene un VARIATION SELECTOR 16 (U + FE0F), che è un carattere Unicode separato, ma che combina con il precedente; un problema simile sarebbe costituito da tutti i caratteri combinati come COMBINING ACUTE ACCENT (U + 0301). Quindi per risolvere * quel * problema, avresti bisogno di un'intera libreria, che non rientra nell'ambito di una risposta StackOverflow. – Amadan

Problemi correlati