Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение, помогите плиз (https://javascript.ru/forum/misc/62525-regulyarnoe-vyrazhenie-pomogite-pliz.html)

рони 15.04.2016 12:37

Цитата:

Сообщение от Frozen Coyote
как заставить выражение выцепить оба?

и что потом?

stupidpendos 15.04.2016 12:38

Frozen Coyote,
Кстати, он Вам неверный код дал. там у него во первых поиск жадный, он будет жрать все подряд идущие параграфы как один, а во вторых, он будет на переносах строк спотыкаться, и еще там есть подводные камни.

Frozen Coyote 15.04.2016 13:10

да, Вы правы, буду по другому. Тогда последний вопрос по моей задачке:

почему выражение /<\/p>(.+?)?<\/p>/gi в строке </p></p></p>123</p> ловит расширенное </p></p></p> но не ловит первое совпадение <\/p><\/p> - жадность как бы выключена, да и я указал знаком вопроса после скобочного участка, что группа как может присутвовать так и отсутствовать. В чем ошибка моя?

stupidpendos 15.04.2016 14:51

Цитата:

Сообщение от Frozen Coyote (Сообщение 414195)
да, Вы правы, буду по другому. Тогда последний вопрос по моей задачке:

почему выражение /<\/p>(.+?)?<\/p>/gi в строке </p></p></p>123</p> ловит расширенное </p></p></p> но не ловит первое совпадение <\/p><\/p> - жадность как бы выключена, да и я указал знаком вопроса после скобочного участка, что группа как может присутвовать так и отсутствовать. В чем ошибка моя?

на вскидку, потому, что + означает хотя бы один символ. Попробуйте звезду вместо него. Тестить неохота

Frozen Coyote 15.04.2016 14:58

и правильно, что неохота. ибо не работает.

stupidpendos 15.04.2016 15:06

Цитата:

Сообщение от Frozen Coyote (Сообщение 414209)
и правильно, что неохота. ибо не работает.

у меня работает
alert("</p></p></p>".match(/<\/p>.*?<\/p>/)[0])

Alexander Belov 15.04.2016 16:03

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));

Frozen Coyote 15.04.2016 23:24

Александр, вот у человека вышеозначенный пример работает

alert("</p></p></p>".match(/<\/p>.*?<\/p>/)[0])

я что то не пойму, как может ловиться совпадение <\/p><\/p> ведь между этими закрывающимися тегами стоит .*? что означает как я понимаю как минимум наличие одного символа? или я неправ?

спасибо Вам за помощь :)

Alexander Belov 16.04.2016 00:35

Frozen Coyote,
. -один любой символ, кроме новой строки
* - совпадение выражения 0 или более раз
? - совпадение выражения 0 или 1 раз

Ссылка

Т.е. может и не быть символа вообще. Не понятно, зачем проверять на 0 или более (*), а потом на 0 или 1 совпадение(?).

Frozen Coyote 19.04.2016 15:22

ребята всем спасибо


Часовой пояс GMT +3, время: 15:14.