split в разных браузерах выдает разный результат

yantar

Новичок
split в разных браузерах выдает разный результат

<script type = "text/javascript">
var str = 'test[normal]';
var reg = /\[(.*)\]/;
arrSplit = str.split(reg);
alert (arrSplit[1]);
</script>

В файрфоксе и опере выдает normal
В эксплорере undefined
А в сафари пустую стоку
Почему так ?

Вариант без сплит работает хорошо в каждом браузере

<script type = "text/javascript">
var reg = /\[(.*)\]/;
var str = 'test[normal]';
reg.test(str);
var strNew = RegExp.$1;
alert (strNew);
</script>
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[Извините. Был невнимателен]
 

yantar

Новичок
Вот что написано в книге Полный справочник по Джаваскрипт 2-е издание (Томас Пауелл, Фриц Шнайдер)
Метод сплит принимает в качестве аргумента строку или регулярное выражение с разделителем, по которому будет разделяться строка.

Вижу линк, значит в книге ошибка.
 

dark-demon

d(^-^)b
ну что я могу сказать... учите английский или учитесь искать русские доки :)
 

CatManZero

Новичок
Если верить этой ссылке.
То split в JavaScript очень даже работает с регулярными выражениями.
Возможно дело в несовсем корректном регулярном выражении.
Думаю должно быть что-то вроде этого:
var reg = /[\[\]]/;
В лисе, эксплорере и опере работает. Сафари не установлен, потому не пробовал.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
тогда нужно екранировать []
var reg = /\[(.*)\]/;
 

CatManZero

Новичок
Нужно, нужно =)
Это форумовский bb-тэг PHP удалил слэшики.

Подозреваю, то же самое произошло и у yantar.
Со слешами оно работает точно так, как он описал.

Но странно, что в лисе получается normal :confused:
Если я правильно понимаю, с регулярным выражением /\[(.*)\]/ всё слово [normal] должно считаться разделителем.
 

yantar

Новичок
Автор оригинала: CatManZero
Подозреваю, то же самое произошло и у yantar.
Со слешами оно работает точно так, как он описал.
Да, слеши я ставил, обрезало их.
Поправил 1-й пост.
 

dark-demon

d(^-^)b
это замечательно, что ты-таки соизволил поправить пост :)
очевидно круглые скобки форсируют включение подстроки в результирующий массив

Код:
javascript:'test[123normal]'.split(/\[\d*(.*?)\]/)
 

CatManZero

Новичок
Автор оригинала: dark-demon
очевидно круглые скобки форсируют включение подстроки в результирующий массив
И в самом деле. Похоже, что лиса ведет себя правильно и в соответствии со стандартом. В отличие от некоторых. :cool:
 

yantar

Новичок
Похоже, что лиса ведет себя правильно и в соответствии со стандартом.
В лисе хорошо работает, а в эксплорере, как известно, свои стандарты )).
Почему в сафари не пашет ??
 

CatManZero

Новичок
Например тут - http://en.wikipedia.org/wiki/ECMAScript написано, что Safari не поддерживает ECMA-262, edition 3, в котором и была добавлена возможность использовать в split регулярные выражения. Правда сделана сноска, в которой сказано, что, вроде как, с апреля сего года Safari поддерживает этот стандарт.

В самом стандарте на эту тему как раз приведен примерчик:
"A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/)
Результат должен получиться такой:
["A", undefined, "B", "bold", "/", "B", "and", undefined,
"CODE", "coded", "/", "CODE", ""]

В лисе результат получился точно, как по стандарту. В эксплорере, "естественно" нет.
В остальных броузерах не пробовал...
 
Сверху