Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тонкости backreference у RegExp в IE 
V
    Опции темы
Burrr
Дата 6.4.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Пишу следующий простой код:
Код
var re = /<text(.*?)>/ig;
var text = "<text color=\"red\" size=\"1\"> \
dsfnjkdsnfkjdsnfkjds \
<text background=\"blue\" face=\"tahoma\">\
";
if (re.test(text)) {
    text = text.replace(re, function () {
        alert(RegExp.$1);
    });
}


В Гекко и Опере, как и положено, последовательно появляются 2 окна:
Код
 color="red" size="1"

Код
 background="blue" face="tahoma"


А вот ИЕ 2 раза показывает :
Код
 color="red" size="1"


Внимание вопрос:
Почему так, и самое главное - как побороть?


--------------------
PM MAIL ICQ   Вверх
AKS
Дата 6.4.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Burrr @  6.4.2007,  16:16 Найти цитируемый пост)
Почему так, и самое главное - как побороть? 

Не нужно использовать глобальные св-ва объекта RegExp - $1, lastMatch, и т.д.
Просто "суньте" в alert второй аргумент функции:
Код

text.replace(re, function () {
        alert(arguments[1]);
}


И, кстати, еще для "кучи" - используйте для сцепки строк стандартный оператор +! Здесь на форуме об этом уже писали знающие люди...

Это сообщение отредактировал(а) AKS - 6.4.2007, 17:04
PM MAIL   Вверх
Burrr
Дата 9.4.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



AKS, спасибо, +1.


--------------------
PM MAIL ICQ   Вверх
Alx
Дата 13.4.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



Цитата(Burrr @  6.4.2007,  16:16 Найти цитируемый пост)
if (re.test(text)) {
    text = text.replace(re, function () {
        alert(RegExp.$1);
    });
}

блин, че за бред такой?? :( опять это замыкания?? что он делает, кто-нибудь может мне объяснить?
2рым параметром метода replace должна быть строка, которая заменит предыдущую.. почему там функция, да еще и выводящая alert? это выше моего предела разума...


--------------------
PM MAIL WWW ICQ   Вверх
AKS
Дата 14.4.2007, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(Alx @  13.4.2007,  23:43 Найти цитируемый пост)
кто-нибудь может мне объяснить?

Могу сделать даже немного больше, а именно - показать, как можно найти ответ самостоятельно. Вот как это делается:
Шаг 1 - в адресную строку вбиваете ссылку на любой ресурс с документацией, например http://developer.mozilla.org/en/docs/Main_Page (не пугайтесь раньше времени - это всего лишь Mozilla Developer Center);
Шаг 2 - в поиске по MDC вбиваете replace (в данной ситуации это как-раз то, что нужно);
Шаг 3 - выбираете в списке любой понравившийся результат (например, String:replace) и знакомитесь с содержимым документации.

PM MAIL   Вверх
Alx
Дата 14.4.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: 10
Всего: 78



мда, разобрался) я просто сначала не очень вник в вопрос, как я понимаю alert здесь только для проверки, а не как самоцель? теперь понятно.


--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.