Если вы чувствуете, что не получаете достаточного уважения как веб-разработчик, вот хороший пирог [предупреждение ненормативной лексики — не нажимайте, если вы легко обижаетесь], чтобы бросать на людей.
На самом деле думаю, что сегмент «время, потраченное на то, чтобы желать медленной мучительной смерти Биллу Гейтсу» нуждается в расширении — Билл не виноват. На самом деле было бы замечательно, если бы команда разработчиков IE была более откровенной и присваивала названия функциям, поэтому мы точно знаем , на кого ругаться: «Привет, я [вставить имя] и я парень, который поставил неопределенное значение в конце вашего массива, каждый раз, когда вы оставляете запятую, заканчивающуюся ошибками, которые будут вас удивлять часами 🙂 ».
Немного горький в тот момент, после того, как меня ужалило это специальное предложение , играя с этой версией Javascript Несмотря на все вещи AJAXy, написание кросс-браузерного кода все равно кажется слепым. Позвольте мне немного пожаловаться …
Из спецификации (p103 / 104);
Если разделитель является регулярным выражением, содержащим вводные скобки, то каждый раз разделитель
совпавшие результаты (включая любые неопределенные результаты) захватывающих скобок, сгруппированных в
выходной массив. […]
На самом деле это поведение не является чем-то особенным для Javascript.
Например, 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));
print_r(preg_split('/(:)/', 'a:b:c', -1, PREG_SPLIT_DELIM_CAPTURE));
…выход…
массив ( [0] => а [1] =>: [2] => б [3] =>: [4] => с )
… и Python …
import re print re.compile('(:)').split('a:b:c')
import re print re.compile('(:)').split('a:b:c')
…выход…
['a', ':', 'b', ':', 'c']
В Javascript это могло бы быть так просто, как …
alert( "a:b:c".split(/(:)/) );
alert( "a:b:c".split(/(:)/) );
… что в Firefox (с помощью Firebug ) дает мне;
[ "А", ":", "б", ":", "с"]
Аналогично Opera 9 делает это правильно. Но в IE (6) …
а, б, в
Где я мой захваченный сепаратор! ,
Как сказал Саймон ;
Почему это так важно? Потому что это вдруг делает написание простых парсеров и токенизаторов намного проще.
На самом деле обвинение в команде IE, вероятно, несправедливо — это, кажется, «особенность», предоставленная командой JScript, и, похоже, она также split.js
, например, с помощью скрипта, подобного split.js
содержащего;
import System.Windows.Forms; MessageBox.Show("a:b:c".split(/(:)/));
import System.Windows.Forms; MessageBox.Show("a:b:c".split(/(:)/));
Я могу скомпилировать его с помощью компилятора jsc в DOS, например, D:js> C:WINDOWSMicrosoft.NETFrameworkv2.0.50727jsc.exe /nologo split.js
затем запустить файл split.exe
чтобы получить точно такой же split.exe
— a,b,c
. Вздох.
В любом случае — подробнее об этом лексере в другой раз (со временем удалось обойти это). Кстати, если вам нужно что-то для серьезного анализа в Javascript (хотя только в Moz), взгляните на этот генератор компилятора в Javascript .