9

私がテストしたものから

"aba".split(/a/).length

戻り値

  • IE8の1
  • Firefox、クローム、オペラで3

私は常にDOM操作やイベントモデルの違いを処理する準備ができていましたが、文字列や正規表現などは明確に定義されていると思いました。私は間違っていましたか?

4

1 に答える 1

4

IEは、split結果配列からすべての未定義または空の文字列を削除します。

あなたの質問は標準の存在についてであるように思われるので、EcmaScriptはJavascriptの世界で最もよく一致します。

そして、正規表現での分割の動作文書化されています:http ://www.ecma-international.org/ecma-262/5.1/#sec-15.5.4.14

例から明らかなように、結果の配列から空の文字列を削除するべきではないため、IE(疑わしい)に障害があります。

"A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/)

    evaluates to the array

["A", undefined, "B", "bold", "/", "B", "and", undefined,  "CODE", "coded", "/", "CODE", ""]

実際、ブラウザ間には他にも違いがあります。解決策は、クロスブラウザの分割正規表現スクリプトを使用することですが、違いを認識し、によって返される配列を適切なテストで処理する方がおそらく良いでしょうsplit。または、いくつかのトリックを使用します。

于 2012-11-23T08:08:43.277 に答える