Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения. Вопрос по "жадному" режиму (https://javascript.ru/forum/misc/25389-regulyarnye-vyrazheniya-vopros-po-zhadnomu-rezhimu.html)

jsuse 03.02.2012 19:21

Регулярные выражения. Вопрос по "жадному" режиму
 
В учебнике есть метериал. Самый последний пример.

var str = "123 456";
var regexp = /\d+ \d+?/g;
alert(str.match(regexp));                  // 123 4

У меня вопрос, почему он не выводит еще 56 ? То есть вот так
123 4 56
Почему он 4ку выводит понятно. Но затем начинается же новая проверка и она начинается с 5ки. А в регэкспе первым стоит \d+. Это значит любая цафра от 1й и больше. Так 5 и 6 как раз подпадают под это. Но почему-то он их игнорирует. Почему?

B@rmaley.e><e 03.02.2012 20:15

Потому что добавление ? сразу после + или * делает этот квантификатор нежадным.

jsuse 03.02.2012 21:07

Цитата:

Сообщение от B@rmaley.e><e (Сообщение 155167)
Потому что добавление ? сразу после + или * делает этот квантификатор нежадным.

Нет, вы не так поняли. Обратите внимение, я не
123 456
написал, а
123 4 56
Я знаю, что делает знак вопроса "?" с квантификаторами. Он переводит их в "ленивый" режим. Это понятно. Непонятно, почему не выводятся 5 и 6 потом. Снова формула и смотрите действия:
var str = "123 456";
var regexp = /\d+ \d+?/g;

1) \d+ - выводит 123. Понятно.
2) \d+? - выводит 4. Это тоже понятно. И получатеся выдав 4ку, он прошел все регуляное выражение. А так как есть еще цифры после 4ки, он начинает все сначала. И началом для него служит уже 5ка. А 5 и 6 как раз подпадают под \d+. Но он их не выводит. Почему?

jsuse 03.02.2012 21:18

Все, вопрос снимается, я понял :)

Объясню и другим, кому понадобится.
Они, 5 и 6, подпадают под \d+ это правда. Но не выводит он их потому, что ПОСЛЕ 5 и 6 НЕТУ больше второй части " \d+?" (то есть нету пробела и любой цифры от одной и больше \d+?) Если бы такое было, то он бы вывел.


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