15.04.2016, 12:37
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,070
|
|
Сообщение от Frozen Coyote
|
как заставить выражение выцепить оба?
|
и что потом?
|
|
15.04.2016, 12:38
|
Интересующийся
|
|
Регистрация: 09.04.2016
Сообщений: 12
|
|
Frozen Coyote,
Кстати, он Вам неверный код дал. там у него во первых поиск жадный, он будет жрать все подряд идущие параграфы как один, а во вторых, он будет на переносах строк спотыкаться, и еще там есть подводные камни.
Последний раз редактировалось stupidpendos, 15.04.2016 в 12:42.
|
|
15.04.2016, 13:10
|
Интересующийся
|
|
Регистрация: 16.02.2011
Сообщений: 14
|
|
да, Вы правы, буду по другому. Тогда последний вопрос по моей задачке:
почему выражение /<\/p>(.+?)?<\/p>/gi в строке </p></p></p>123</p> ловит расширенное </p></p></p> но не ловит первое совпадение <\/p><\/p> - жадность как бы выключена, да и я указал знаком вопроса после скобочного участка, что группа как может присутвовать так и отсутствовать. В чем ошибка моя?
|
|
15.04.2016, 14:51
|
Интересующийся
|
|
Регистрация: 09.04.2016
Сообщений: 12
|
|
Сообщение от Frozen Coyote
|
да, Вы правы, буду по другому. Тогда последний вопрос по моей задачке:
почему выражение /<\/p>(.+?)?<\/p>/gi в строке </p></p></p>123</p> ловит расширенное </p></p></p> но не ловит первое совпадение <\/p><\/p> - жадность как бы выключена, да и я указал знаком вопроса после скобочного участка, что группа как может присутвовать так и отсутствовать. В чем ошибка моя?
|
на вскидку, потому, что + означает хотя бы один символ. Попробуйте звезду вместо него. Тестить неохота
|
|
15.04.2016, 14:58
|
Интересующийся
|
|
Регистрация: 16.02.2011
Сообщений: 14
|
|
и правильно, что неохота. ибо не работает.
|
|
15.04.2016, 15:06
|
Интересующийся
|
|
Регистрация: 09.04.2016
Сообщений: 12
|
|
Сообщение от Frozen Coyote
|
и правильно, что неохота. ибо не работает.
|
у меня работает
alert("</p></p></p>".match(/<\/p>.*?<\/p>/)[0])
|
|
15.04.2016, 16:03
|
|
Профессор
|
|
Регистрация: 12.03.2015
Сообщений: 173
|
|
Frozen Coyote,
Да, увидел, что не правильно сделал в предыдущем варианте. Сам параллельно с Вами разбираюсь.
var apr = "It's a dark april night",
may = "It's a bright may day",
jun = "It's a bright june day",
jul = "It's a bright july day";
var pattern = /bright(:?(?!june).)*day/;
alert(apr.match(pattern));
alert(may.match(pattern));
alert(jun.match(pattern));
alert(jul.match(pattern));
|
|
15.04.2016, 23:24
|
Интересующийся
|
|
Регистрация: 16.02.2011
Сообщений: 14
|
|
Александр, вот у человека вышеозначенный пример работает
alert("</p></p></p>".match(/<\/p>.*?<\/p>/)[0])
я что то не пойму, как может ловиться совпадение <\/p><\/p> ведь между этими закрывающимися тегами стоит .*? что означает как я понимаю как минимум наличие одного символа? или я неправ?
спасибо Вам за помощь
|
|
16.04.2016, 00:35
|
|
Профессор
|
|
Регистрация: 12.03.2015
Сообщений: 173
|
|
Frozen Coyote,
. -один любой символ, кроме новой строки
* - совпадение выражения 0 или более раз
? - совпадение выражения 0 или 1 раз
Ссылка
Т.е. может и не быть символа вообще. Не понятно, зачем проверять на 0 или более (*), а потом на 0 или 1 совпадение(?).
|
|
16.04.2016, 10:18
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
Сообщение от Alexander Belov
|
Не понятно, зачем проверять на 0 или более (*), а потом на 0 или 1 совпадение(?).
|
Это называется нежадный/ленивый поиск
Цитата:
|
важно понимать: обычно ? сам является квантификатором (ноль или один). Но если он стоит после другого квантификатора (или даже после себя), то обретает другой смысл – в этом случае он меняет режим его работы на ленивый.
|
|
|
|
|