IE 中的 JavaScript split() 函數並不符合規範。
Fuecks 引述 ECMA-262(即 JavaScript 1.5,參考「用 ECMAScript 寫網頁」)中有關 split() 函式的定義:
若果正規表達式裏面的分隔字符有括號包圍,每當分隔字符被搜尋到,括號中的內容便會被切割出來放到輸出的陣列裏。……
Fuecks 認為這種語法在其他編程語言很常見,例如在 Perl 中:
1
2
| use Data::Dumper;
print Dumper(split(/(:)/, 'a:b:c'));
|
輸出是:
1
2
3
4
5
| $VAR1 = 'a';
$VAR2 = ':';
$VAR3 = 'b';
$VAR4 = ':';
$VAR5 = 'c';
|
這是正確的輸出。在 PHP 中:
1
| print_r(preg_split('/(:)/', 'a:b:c', -1, PREG_SPLIT_DELIM_CAPTURE));
|
輸出是:
1
2
3
4
5
6
7
| Array (
[0] => a
[1] => :
[2] => b
[3] => :
[4] => c
)
|
顯然這個也跟規範吻合。在 Python 中:
1
2
| import re
print re.compile('(:)').split('a:b:c')
|
輸出是:
1
| ['a', ':', 'b', ':', 'c']
|
這也是正確的。在 Firefox 和 Opera 9 中使用 JavaScript:
1
| alert( "a:b:c".split(/(:)/) );
|
輸出是:
毫不意外地兩個瀏覽器都輸出了正確的結果。但是到了 IE 手上,這個函數的輸出變成了:
IE 喜歡獨樹一幟的又一例證。