Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения. Нежадное повторение (https://javascript.ru/forum/misc/69558-regulyarnye-vyrazheniya-nezhadnoe-povtorenie.html)

Prolific 03.07.2017 11:51

Регулярные выражения. Нежадное повторение
 
Привет, форумчане. Не могу разобраться с вопросом о регулярных выражениях.
Есть строка: aaab
Есть регулярное выражение /a+b/ оно выведет строку aaab, с этим все понятно
Регулярное выражение /a+?b/ выведет строку aaab, хотя по идее должно вывести ab
Объясните почему это так, как идет сам поиск.
Спасибо.

Alexandroppolus 03.07.2017 12:02

Поиск идет слева направо. Регулярка стремится как можно скорее найти совпадение. "aaab" хоть и длиннее, чем "ab", но начинается раньше, потому так.

Вот если сделать необязательное b (a+?b?), то да, будет "а".
В то же время, a+b? снова дает "aaab", т.к. оба отрезка жадные.
a+b?? даст "aaa", тут ашки жадные, б-шки нет.

https://learn.javascript.ru/regexp-greedy-and-lazy

laimas 03.07.2017 12:03

Цитата:

Сообщение от Prolific
хотя по идее должно вывести ab

Шаблон в этом случае должен быть /a?b/

Prolific 03.07.2017 12:08

Спасибо, понял


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