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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения, Как снять жадность квантификаторов 
:(
    Опции темы
S.A.P.
Дата 18.2.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 8
Всего: 71



Задача такая:
найти миимальный промежуток между 2-мя словами и заменить его на другое слово.
Вот как я делал на PHP
Код

$text=preg_replace("/word1.*word2/U", "word3", $text);


как бы такую - же беду организовать на JavaScript? Дело в том, что он не поддерживает модификатор U и вобще реги там кривовато сделаны smile . Как быть? Хочу сделать это через регулярные выражения, а не цикловым перебором всей строки.

Это сообщение отредактировал(а) Perchilla - 18.2.2005, 11:08
PM MAIL   Вверх
GoodBoy
Дата 18.2.2005, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

Репутация: 2
Всего: 83



Цитата(Perchilla @ 18.2.2005, 10:55)
модификатор U

а что это?


--------------------
Чем дальше в лес, тем толще партизаны...

Цитата(igorold @  1.5.2016,  17:40 Найти цитируемый пост)
Индейцы не обратили внимания на поток беженцев из Европы… Теперь они живут в резервациях. 
PM MAIL   Вверх
S.A.P.
Дата 18.2.2005, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 8
Всего: 71



Цитата(GoodBoy @ 18.2.2005, 12:01)
а что это?
это который "жадность" инвертирует. Т.е. по умолчанию шаблон хватает максимум текста, который ему соответствует, а с U - минимум.

PM MAIL   Вверх
S.A.P.
Дата 18.2.2005, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 8
Всего: 71



Нашел среди примеров
Код

text = text.replace(/(word1.*?word2)/g, "word3");


незнаю почему, но это работает именно так как надо. Может хоть это кто нибудь объяснит? smile .
Добавлено @ 12:37
Разница в том, что вопросительный знак поставил smile
PM MAIL   Вверх
Sardar
Дата 19.2.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Perchilla ты бы код выложил, а то не ясно где вопрос smile

По теории: да, '?' - делает квантификатор не жадным.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Иль
Дата 19.3.2005, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

Репутация: 2
Всего: 14



Все дело в "?", вообще незаменимом в сложных регах. Он уменьшает "жадность" квантификаторов *, +, {}, и ?. То что тебе и надо.
твою функцию preg_replace из PHP можно задать так
Код
$text=preg_replace("/word1.*?word2/i", "word3", $text);

модификатор i - чтоб не учитывать регистр.
Соответственно "?" и в JS работает. (чегож не работать, если он и в posix'е есть)
А вот интересно, в JS выражение word1.*?word2 в скобках стоит - это синтаксис или всетаки карманы поддерживаются?
Нда, пора JS учить.



--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Guest
Дата 19.3.2005, 18:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Впервые слышу слова: жадность (в программировании), квантификаторы - не объясните что это такое?
  Вверх
Sardar
Дата 19.3.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Цитата
А вот интересно, в JS выражение word1.*?word2 в скобках стоит - это синтаксис или всетаки карманы поддерживаются?

Что ты имел в виду? smile Захват подстрок естественно поддерживается. Не захватывающие скобки(просто группировка) это (?: )

Цитата(Guest @ 19.3.2005, 17:00)
Впервые слышу слова: жадность (в программировании), квантификаторы - не объясните что это такое?

Это долго и на пальцах не стоит smile Почитаю любую книжку, это полезно. Читай третий пост
Perchilla.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Aliance
Дата 30.6.2005, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Вопросительный знак после любого символа повторения снимает жадность.
PM MAIL WWW ICQ Skype   Вверх
Bkm
Дата 5.1.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я Иль - не могу зарегиться - Винград подглючил http://forum.vingrad.ru/index.php?showtopic=76891

Словил глюк в ИЕ 5.0 с "?" в выражении (JS отключается)
Код

p=u.replace(/\/\w+?\.(gif|jpg)$/,'/'+n);

В принципе "?" там и не нуже, я по привычке поставил, но будте готовы...

Если на форуме про это еще писали - помогите найти топик (дайте ключевые слова или ссылку) или поделитесь мыслями если еще чего знаете
спс
PM MAIL   Вверх
Sardar
Дата 5.1.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Иль проверил, всё ОК, вырезает имя картинки.
Только ты не подумал что имена файлов пробелы и другие "не буквы" содержать могут smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Bkm
Дата 5.1.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Sardar, спасибы.
Если я тебя правильно понял - разве в сети используют имена файлов с пробелом и "не буквами".

Странно что у тебя работает. Ты именно под IE 5.0 проверял? Я в разных оперрационках запускал - 5.0 "отказывается" работать
PM MAIL   Вверх
Sardar
Дата 5.1.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Млин эта не внимательность smile
Точно под IE5.0 не пашет(проверил), т.к. его реализация регов не знает понятия "снять жадность квантификатора", точно также его массивы не имеют методов push, pop, а функции call и apply, короче это убожество что нужно забыть, не заморачивайся smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Bkm
Дата 5.1.2006, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Sardar, вот ты всего пару строчек написал, а не представляеш какие они золотые и сколько проблем в будующем они мне убили! Особенно спасибо за
Цитата(Sardar @ 5.1.2006, 15:16 Найти цитируемый пост)

его реализация регов не знает понятия "снять жадность квантификатора"

и
Цитата(Sardar @ 5.1.2006, 15:16 Найти цитируемый пост)

массивы не имеют методов push, pop

- уж это я юзаю вдоль и поперек.
А про
Цитата(Sardar @ 5.1.2006, 15:16 Найти цитируемый пост)

call и apply

помню, ты как-то говорил. Пришлось отказаться скрепя сердцем.

Прошу, если еще чего на вскидку помниш - напиши или дай ссылку где глянуть. IE5.0 регулярно юзаю.


К сожалению IE5.0 нельзя списывать со счетов, но слава богу только в некоторых случаях. Это конечно больше относиться к интросетям и дорогим качественным проектам.
Пример - междунородная компания с огромным количеством денежных smile сотрудников только в одной Москве - и у всех на работе лицензионка с Win 2000 Pro и IE5.0 - и никаких SP незя.
PM MAIL   Вверх
Sardar
Дата 5.1.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Ну допустим не достающее API можно самому написать, уже выкладывал сюда код что реализует часто используемые методы массивов и функций для тех кто их не поддерживает.
Но реги изменить нельзя, свои писать в не менее 50кб кода (медленного кстати) и большой усталости "просто так", потому что ИЕ5.0

К счастью не пишу для
Цитата(Bkm @ 5.1.2006, 14:44 Найти цитируемый пост)

Пример - междунородная компания с огромным количеством денежных smile сотрудников только в одной Москве - и у всех на работе лицензионка с Win 2000 Pro и IE5.0 - и никаких SP незя.



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


 




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


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

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