Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2012, 19:21
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

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

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 как раз подпадают под это. Но почему-то он их игнорирует. Почему?
Ответить с цитированием
  #2 (permalink)  
Старый 03.02.2012, 20:15
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Потому что добавление ? сразу после + или * делает этот квантификатор нежадным.
Ответить с цитированием
  #3 (permalink)  
Старый 03.02.2012, 21:07
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

Сообщение от B@rmaley.e><e Посмотреть сообщение
Потому что добавление ? сразу после + или * делает этот квантификатор нежадным.
Нет, вы не так поняли. Обратите внимение, я не
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:10.
Ответить с цитированием
  #4 (permalink)  
Старый 03.02.2012, 21:18
Аспирант
Отправить личное сообщение для jsuse Посмотреть профиль Найти все сообщения от jsuse
 
Регистрация: 10.04.2010
Сообщений: 92

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения. Разница, если String и RegExp методы jsuse Общие вопросы Javascript 1 23.11.2011 15:44
JS и регулярные выражения. LRCenter Общие вопросы Javascript 5 03.05.2011 16:53
нежадные регулярные выражения KOLANICH Общие вопросы Javascript 2 12.12.2010 01:08
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35
регулярные выражения php HelpeR Серверные языки и технологии 5 15.09.2009 21:09