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
發表新回應