Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение начинается не с той строки... (https://javascript.ru/forum/misc/62131-regulyarnoe-vyrazhenie-nachinaetsya-ne-s-tojj-stroki.html)

Almag13 25.03.2016 21:10

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

Есть строка

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;

Decode 25.03.2016 22:12

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) );

Almag13 25.03.2016 22:45

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

Мне немного не понятен алгоритм поиска и присоединения строк, для меня сейчас плюс как конкатенатор... то есть присоединение в строках ))
То есть в регулярных выражениях конкатенаторов нет? прямое выражение? Объясните работу этого кода?
вот мы ищем все числа \d+ с жадным поиском то есть захватываем все полностью, далее мы запускаем поиск снова? (\.\d+)? или же мы возвращаемся??? Вот в чем вопрос, то есть мы проходим по строке дважды?

Decode 25.03.2016 22:50

Цитата:

Сообщение от Almag13
(\.\d+) - так же цифры... а знак ? - означает что поиск так же происходит жадный...

Этот квантификатор означает необязательность. Ну в смысле может быть, может не быть.
Цитата:

Сообщение от Almag13
Объясните работу этого кода?

А что тут объяснять. Загляни в учебник.

Almag13 25.03.2016 23:14

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

orionpro 25.03.2016 23:52

Цитата:

Сообщение от Almag13 (Сообщение 412052)
Если я правильно понял, то происходит следующее...

Я думаю, что в начале нашли первое число \d+ потом второе число \d+, потом третье \d+(\.\d+)? потому что проверили есть ли необязательное дробное (\.\d+)?.

Almag13 26.03.2016 00:17

То есть последовательно

Almag13 26.03.2016 00:35

По какой причине после того как мы убираем ? в этом выражении он находит только последние символы 3.7
Выражение - (\.\d+)?

Decode 26.03.2016 01:06

Almag13, (\.\d+)? — квантификатор ? означает может повторяться 0 или 1 раз, в данном случае он применен к этой группе.

Almag13 26.03.2016 18:26

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


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