2016-04-22 7 views
6

通常は、私はstr[i]のようなものを使用します。実際に見ることができる文字列の文字だけをどのように反復するのですか?

しかし、どうすればstr = "☀️"

str[i]が失敗します。 for (x of str) console.log(x)も失敗します。それは明らかに文字列に2つの絵文字があるにもかかわらず、合計4文字を印刷します。

私は文字列(および改行、私は推測することができます)で見ることができるすべての文字を繰り返し行うための最良の方法は何ですか?

理想的な解決策は、2文字の2つの文字の配列、つまり2つの絵文字を返します。クレームされた複製、および私が見つけた他のソリューションの束は、この基準に適合しません。

+2

私はあなたがこのブログの記事をチェックすべきだと思う:[リンク](https://mathiasbynens.be/ notes/javascript-unicode) – msencer

+2

[JavaScript文字列をコードポイントの配列に分割しますか? (「サロゲートペア」は考慮するが「グラフェムクラスタ」は考慮しない)](http://stackoverflow.com/questions/21397316/split-javascript-string-into-array-of-codepoints-taking-into-account-surrogat ) –

+0

絵文字をキャプチャしたい、あるいはその上をスキップして、次の「通常の」文字を探したいと思っていますか? – KevBot

答えて

0

アストラル文字のための独自のメソッドを作成する必要があります。

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

これはすべての場合に機能しません。 "foob☀️ar" .match(/ [\ uD800- \ uDBFF] [\ uDC00- \ uDFFF] | ./g); 'を考えてください。 – thedayturns

+0

@thedayturns:ええ、私はJavaScriptが「誤って」1つのUnicode文字を2つのJS文字に分割するアストラル文字のみをカバーしました。空の文字列には、VARIATION SELECTOR 16(U + FE0F)があります。これは、別個のUnicode文字ですが、前のものと組み合わされています。同様の問題は、COMBINING ACUTE ACCENT(U + 0301)のようなすべての結合文字になります。したがって、*問題を解決するには、StackOverflowの答えの範囲外にあるライブラリ全体が必要になります。 – Amadan

関連する問題