まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2008-05-21 (水) 2008-05-30 (金) > 最新


2008-05-24 (土)

正規表現で split した場合の IE の挙動

JavaScript の split では引数に正規表現が使えることを知ったので、 以前書いた 空白やカンマで区切られたデータを配列に変換する 処理を、 次のように書き直してみました。

var F = datt.replace(/^\s+|\s+$/g, "").split(/[\s,]+/);

このように、前後の空白を trim した後、 空白文字 or カンマのかたまりを区切り文字にして split という、 非常にすっきりとしたコードにすることができます。

さて、ここからが本題ですが、 実は split の引数に正規表現を使うと、Internet Explorer は奇妙な動作をします。

試しに、次のようなコードを実行してみます。

var str  = "  a  ,  b, c ,d  e f,g ";
var str1 = str.split(/[\s,]/);
var str2 = str.replace(/^\s+|\s+$/g, "").split(/[\s,]+/);
alert(str1);
alert(str2);

IE 以外のブラウザでは、結果は以下のようになります。

,,a,,,,,b,,c,,d,,e,f,g,
a,b,c,d,e,f,g

ところが IE で実行すると、結果は次のようになります。

a,b,c,d,e,f,g
a,b,c,d,e,f,g

このように、正規表現での split は便利ですが、 ブラウザによって動作が違うことがあるので注意する必要があります。

ちなみにこの挙動を逆に利用すると、最初に書いたコードは、IE 限定で良ければ、

var F = datt.split(/[\s,]/);

だけで済ませる事が出来ます。 しかし、この動作はバグっぽいですし、IE8 では動作が変わったりするかもしれないので、 最初に書いたようなコードにしておくのが無難だと思います。

Tags: JavaScript | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集