Регулярное выражение начинается не с той строки...
Всем привет!
Есть строка 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; |
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) ); |
Работает, спасибо!
Не до понял значит немного процесс... работы. Как я понял... сначала ищем все цифры с надежным квантаром, то есть проходим поиском до упора, а так как мы уже нашли все цифры \d+ Далее мы начинаем искать цифры те что отмечены в скобках так же с жадным поиском, то есть возвращаемся назад и ищем то что в скобках (\.\d+) - так же цифры... а знак ? - означает что поиск так же происходит жадный... Мне немного не понятен алгоритм поиска и присоединения строк, для меня сейчас плюс как конкатенатор... то есть присоединение в строках )) То есть в регулярных выражениях конкатенаторов нет? прямое выражение? Объясните работу этого кода? вот мы ищем все числа \d+ с жадным поиском то есть захватываем все полностью, далее мы запускаем поиск снова? (\.\d+)? или же мы возвращаемся??? Вот в чем вопрос, то есть мы проходим по строке дважды? |
Цитата:
Цитата:
|
Если я правильно понял, то происходит следующее...
сначала происходит поиск всех цифр \d+ - жадный поиск Далее мы начинаем сначала строки искать или же возвращаемся? (\.\d+)? То есть я понимаю, что мы проходим по новой всю строку и уже выбираем тот момент, что в скобках. Или второй вариант, мы прошли всю строку выполнили первое действие \d+ - нашли все числа И потом вернулись обратно и начали поиск с конца то что в скобках (\.\d+)? - так же жадным поиском |
Цитата:
|
То есть последовательно
|
По какой причине после того как мы убираем ? в этом выражении он находит только последние символы 3.7
Выражение - (\.\d+)? |
Almag13, (\.\d+)? — квантификатор ? означает может повторяться 0 или 1 раз, в данном случае он применен к этой группе.
|
Можно объяснить как работает поиск полный из всего выражения...
/\d+(\.\d+)?/g; |
Часовой пояс GMT +3, время: 01:24. |