Регулярные выражения. Вопрос по "жадному" режиму
В учебнике есть метериал. Самый последний пример.
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 как раз подпадают под это. Но почему-то он их игнорирует. Почему? |
Потому что добавление ? сразу после + или * делает этот квантификатор нежадным.
|
Цитата:
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+. Но он их не выводит. Почему? |
Все, вопрос снимается, я понял :)
Объясню и другим, кому понадобится. Они, 5 и 6, подпадают под \d+ это правда. Но не выводит он их потому, что ПОСЛЕ 5 и 6 НЕТУ больше второй части " \d+?" (то есть нету пробела и любой цифры от одной и больше \d+?) Если бы такое было, то он бы вывел. |
Часовой пояс GMT +3, время: 00:02. |