在 IE 中的 JavaScript split() 函數

Harry Fuecks 在 Site Point 說了一個令他困惑的問題:IE 中的 JavaScript split() 函數並不符合規範

Fuecks 引述 ECMA-262(即 JavaScript 1.5,參考「用 ECMAScript 寫網頁」)中有關 split() 函式的定義:

若果正規表達式裡面的分隔字元有括號包圍,每當分隔字元被搜尋到,括號中的內容便會被切割出來放到輸出的陣列裡。......

Fuecks 認為這種語法在其他編程語言很常見,例如在 Perl 中:

use Data::Dumper; 
print Dumper(split(/(:)/, 'a:b:c'));

輸出是:

$VAR1 = 'a';
$VAR2 = ':';
$VAR3 = 'b';
$VAR4 = ':';
$VAR5 = 'c';

這是正確的輸出。在 PHP 中:

print_r(preg_split('/(:)/', 'a:b:c', -1, PREG_SPLIT_DELIM_CAPTURE));

輸出是:

Array
(
[0] => a
[1] => :
[2] => b
[3] => :
[4] => c
)

顯然這個也跟規範吻合。在 Python 中:

import re
print re.compile('(:)').split('a:b:c')

輸出是:

['a', ':', 'b', ':', 'c']

這也是正確的。在 Firefox 和 Opera 9 中使用 JavaScript:

alert( "a:b:c".split(/(:)/) ); 

輸出是:

["a",":","b",":","c"]

毫不意外地兩個瀏覽器都輸出了正確的結果。但是到了 IE 手上,這個函數的輸出變成了:

a,b,c

IE 喜歡獨樹一幟的又一例證。


IE对应的素php中的explod

IE对应的素php中的explode函数吧...

發表新回應

  • Images can be added to this post.

更多關於格式化選項的資訊

Captcha
以下問題用來確認閣下是一個真人,防止機器人濫發垃圾文章。