JavaScriptで絵文字の正確な長さを取得する


JavaScriptで絵文字の正確な長さを取得したいのですが、うまくいきません。  
(蛇の絵文字)は1文字なので 1 を期待しているのですが、2 が 返ってきてしまいます。  
Firefox, Node.js, io.js などいろいろなもので試しましたが、やはり 2 が返ってきています。  
どうすれば、正確な長さを取得できるのでしょうか?

[code]

    
    var my_string = ""; // 蛇の絵文字
    var str_length = my_string.length;
    console.log(str_length); // 2
    
    
[/code]




絵文字はサロゲートペアと呼ばれる ~~領域に格納されています~~ 代用符号を用いた2個組の文字で構成されます。  
サロゲートペアを間引いた数が可視文字の数となります。

[code]

    var my_string = "";
    var str_length = my_string.length - (my_string.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g).length - 1);
    print(str_length); // 1
    
[/code]

**追記**

ちょっと改良

[code]

    var my_string = "";
    var str_length = my_string.length - (my_string.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g)||[]).length;
    print(str_length); // 1
    
[/code]




`String.prototype[@@iterator]` はサロゲートペアが考慮されているので、  
それを内部で使用している関数など使えば取得できます。

[code]

    Array.from("野家").length
    // => 3
    
[/code]

