Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.03.2016, 21:10
Интересующийся
Отправить личное сообщение для Almag13 Посмотреть профиль Найти все сообщения от Almag13
 
Регистрация: 22.03.2016
Сообщений: 12

Регулярное выражение начинается не с той строки...
Всем привет!

Есть строка

var string = "brendyi-1/acura.html?tv_brand=&tv_model-acura=MDX&tv_year=2008&tv_engine=3.7";


Нужно найти все числа полностью их всего три...

Что не получается и не понимается...

Все числа вывести не проблема
\d+ или \d+?

Но проблема вывести каждое число как оно есть в массив получается длина массива должна равняться трем... У меня получается двум...

Что я делал:
var reSec = /\d?(\d.\d)/g;
var secString = string.match(reSec);


Такой подход не выводит первую цифру... А выводит две остальные...
Ок, пошел другим путем... Явно указал вывести только первую цифру
var reSec = /(^\d{1})/g;

результат получаю null

Хорошо действую другим путем... Указываю одну цифру по иному
простое \d
Итак, рассуждения, мы нашли цифру первую двигаемся дальше перед нами выбор в жадном режиме выбирать или нет
Пусть будет жадный, мы пробегаемся по всей строке и ищем все цифры.
/\d+/g;

Но как мы видим в строке есть цифра с точкой
и ее вывести не получается...
Что не так, пробую и так...

/\d+(\d.\d)/g;
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2016, 22:12
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

var string = "brendyi-1/acura.html?tv_brand=&tv_model-acura=MDX&tv_year=2008&tv_engine=3.7";
var reSec = /\d+(\.\d+)?/g;
var secString = string.match(reSec);

alert( JSON.stringify(secString) );
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2016, 22:45
Интересующийся
Отправить личное сообщение для Almag13 Посмотреть профиль Найти все сообщения от Almag13
 
Регистрация: 22.03.2016
Сообщений: 12

Работает, спасибо!
Не до понял значит немного процесс... работы.
Как я понял... сначала ищем все цифры с надежным квантаром, то есть проходим поиском до упора, а так как мы уже нашли все цифры \d+ Далее мы начинаем искать цифры те что отмечены в скобках так же с жадным поиском, то есть возвращаемся назад и ищем то что в скобках
(\.\d+) - так же цифры... а знак ? - означает что поиск так же происходит жадный...

Мне немного не понятен алгоритм поиска и присоединения строк, для меня сейчас плюс как конкатенатор... то есть присоединение в строках ))
То есть в регулярных выражениях конкатенаторов нет? прямое выражение? Объясните работу этого кода?
вот мы ищем все числа \d+ с жадным поиском то есть захватываем все полностью, далее мы запускаем поиск снова? (\.\d+)? или же мы возвращаемся??? Вот в чем вопрос, то есть мы проходим по строке дважды?
Ответить с цитированием
  #4 (permalink)  
Старый 25.03.2016, 22:50
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Сообщение от Almag13
(\.\d+) - так же цифры... а знак ? - означает что поиск так же происходит жадный...
Этот квантификатор означает необязательность. Ну в смысле может быть, может не быть.
Сообщение от Almag13
Объясните работу этого кода?
А что тут объяснять. Загляни в учебник.
Ответить с цитированием
  #5 (permalink)  
Старый 25.03.2016, 23:14
Интересующийся
Отправить личное сообщение для Almag13 Посмотреть профиль Найти все сообщения от Almag13
 
Регистрация: 22.03.2016
Сообщений: 12

Если я правильно понял, то происходит следующее...
сначала происходит поиск всех цифр
\d+ - жадный поиск
Далее мы начинаем сначала строки искать или же возвращаемся?
(\.\d+)?
То есть я понимаю, что мы проходим по новой всю строку и уже выбираем тот момент, что в скобках.
Или второй вариант, мы прошли всю строку выполнили первое действие
\d+ - нашли все числа
И потом вернулись обратно и начали поиск с конца то что в скобках
(\.\d+)? - так же жадным поиском
Ответить с цитированием
  #6 (permalink)  
Старый 25.03.2016, 23:52
Аспирант
Отправить личное сообщение для orionpro Посмотреть профиль Найти все сообщения от orionpro
 
Регистрация: 23.12.2015
Сообщений: 39

Сообщение от Almag13 Посмотреть сообщение
Если я правильно понял, то происходит следующее...
Я думаю, что в начале нашли первое число \d+ потом второе число \d+, потом третье \d+(\.\d+)? потому что проверили есть ли необязательное дробное (\.\d+)?.
Ответить с цитированием
  #7 (permalink)  
Старый 26.03.2016, 00:17
Интересующийся
Отправить личное сообщение для Almag13 Посмотреть профиль Найти все сообщения от Almag13
 
Регистрация: 22.03.2016
Сообщений: 12

То есть последовательно
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2016, 00:35
Интересующийся
Отправить личное сообщение для Almag13 Посмотреть профиль Найти все сообщения от Almag13
 
Регистрация: 22.03.2016
Сообщений: 12

По какой причине после того как мы убираем ? в этом выражении он находит только последние символы 3.7
Выражение - (\.\d+)?
Ответить с цитированием
  #9 (permalink)  
Старый 26.03.2016, 01:06
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Almag13, (\.\d+)? — квантификатор ? означает может повторяться 0 или 1 раз, в данном случае он применен к этой группе.
Ответить с цитированием
  #10 (permalink)  
Старый 26.03.2016, 18:26
Интересующийся
Отправить личное сообщение для Almag13 Посмотреть профиль Найти все сообщения от Almag13
 
Регистрация: 22.03.2016
Сообщений: 12

Можно объяснить как работает поиск полный из всего выражения...
/\d+(\.\d+)?/g;
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярное выражение tata4ka Общие вопросы Javascript 4 15.11.2014 00:56
Регулярное выражение для поиска строк, не заканчивающихся определенной подстрокой. sutok85 Общие вопросы Javascript 7 08.02.2013 00:02
Как написать регулярное выражение для поиска до конца строки isqad88 Общие вопросы Javascript 3 11.02.2012 15:34
Регулярное выражение: любой символ, включая перевод строки Gleb Общие вопросы Javascript 3 28.07.2011 12:15
регулярное выражение theo_ Общие вопросы Javascript 15 21.06.2010 10:29