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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с регулярными выражениями, В IE работает но не работает в Mozill’e 
V
    Опции темы
Goliath
  Дата 12.11.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 5



Ниже приведен код, который корректно выдирает содержимое в теге <script> в Internet Explorer 6+, но по непонятным для меня причинам не работает в Mozill’e и Oper’e (Как в Oper’e и Mizill’e обозначать перенос строки?). Если кто знает, можете объяснить, буду очень признателен.
Код

var reg = "<script>(.|\n|\t)+<\/script>";
var regexp = new RegExp(reg, "g");
alert(regexp);
                    
var m = regexp.exec(htmlString);
                    
if (m == null) 
{
    alert("No match");

else 
{
    var s = "Match at position " + m.index + ":\n";
    for (i = 0; i < m.length; i++) 
    {
        s = s + m[i] + "\n";
    }
    alert(s);
}

--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
AKS
Дата 12.11.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Goliath, попробуйте такой регвыр:
Код

 /<(script).*?>(.|[\r\n])*?<\/\1>/gi

PM MAIL   Вверх
Goliath
Дата 12.11.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 5



Нет, не работает, причем даже в IE 7. Просто, скорее всего, Opera и Mozilla как-то по-другому помечают перенос строки.  Когда я например ввожу строку:
Код

<script>sdfsdf sdfs fs sd</script>
Тогда во все браузерах приведенное мной выражение срабатывает, но как только мне стоит сделать перенос строки:
Код

 <script>sdfsdf 
sdfs fs sd</script>
то регулярка срабатывает только в IE. Есть ли какой-то альтернативный метод указание переноса строки кроме \n?


Это сообщение отредактировал(а) Goliath - 12.11.2006, 16:34
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
AKS
Дата 12.11.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Goliath, у Вас не работает из-за вот этого:
Цитата

var regexp = new RegExp(reg, "g");

Используйте такую переменную:
Код

var regexp = /<(script).*?>(.|[\r\n])*?<\/\1>/gi

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


Бывалый
*


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

Репутация: нет
Всего: 5



Все равно не срабатываетв Oper'e и Mozille. Я сделал так, вариант 100%, проверал:
Код

if (navigator.appName == "Microsoft Internet Explorer")
   var reg = "<script>(.|\n)+<\/script>";
else
   var reg = "<script>(.|\r?\n)+<\/script>";


Это сообщение отредактировал(а) Goliath - 12.11.2006, 17:58
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
12345c
Дата 12.11.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Код
"gi" - уже теплее, осталось вспомнить про атрибут "m" :)

<textarea id=s1>12345<script>abcdef
   ghijk</script>
</textarea>
<script>onload=function(){
s=document.getElementById('s1').value
alert(s.search(/<(script).*>(.|[\r\n])*<\/\1>/gim))
}</script>



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
AKS
Дата 12.11.2006, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



12345c
Цитата

"gi" - уже теплее, осталось вспомнить про атрибут "m" smile

Многострочный поиск не нужен. Неужели Вы свой пример не проверили без этого флажка?
В данном случае проблема в синтаксисе - регвыры не так должны выглядеть:
Цитата

var reg = "<script>(.|\n)+<\/script>";

PM MAIL   Вверх
12345c
Дата 12.11.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Действительно, без "m" работает; я полагался на мнение высказавшихся экспертов: не работает, значит, есть причина smile
PM WWW   Вверх
Goliath
Дата 12.11.2006, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 5



Почему мой вариант не подходить работает стабильно и правильно во всех браузерах! А в опере 9 и мозиле 1.5 
Код

/<(script).*?>(.|[\r\n])*?<\/\1>/gi
, работает не корректно. Да и в IE 7 когда использую \r\n он просто виснет. to AKS спасибо тебе громадное на толкнул на мысль решения проблемы.

Это сообщение отредактировал(а) Goliath - 12.11.2006, 21:58
--------------------
Наша жизнь растрачивается на мелочи… Упрощайте, упрощайте. [Генри Торо] 
PM MAIL   Вверх
Zeroglif
Дата 13.11.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 28
Всего: 66



Цитата(Goliath @  12.11.2006,  11:16 Найти цитируемый пост)
Ниже приведен код, который корректно выдирает содержимое в теге <script> в Internet Explorer 6+ 

Не может такой код корректно выдирать содержимое по определению, хотя бы просто потому, что множитель/квантификатор стоит за скобкой, а не внутри. Соответственно выдираться будет последнее вхождение (символ). Из того, что я вижу, вам нужно:

1. отказаться от конструктора new RegExp() в пользу литеральной записи, иначе придётся разбирать строку, ставить при необходимости двойные обратные слеши и т.п., что вы сейчас не делаете;

2. определиться со способом записи переноса строки в регулярном;

3. правильно расставить скобки, учитывая то, что множитель - это неотъемлемая часть фрагмента;

Приблизительные варианты:

Код

/<script.*?>([\s\S]*?)<\/script>/ig;
/<script.*?>((.|[\r\n])*?)<\/script>/ig;
/<script.*?>((.|\r|\n)*?)<\/script>/ig;


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


 




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


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

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