Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярное выражение начинается не с той строки... (https://javascript.ru/forum/misc/62130-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;

Strongman 26.03.2016 21:01

Я изобрел 3 способа:
var str = "brendyi-1/acura.html?tv_brand=&tv_model-acura=MDX&tv_year=2008&tv_engine=3.7";
var re = /\d+(?!\/)/g;
var obj = str.match(re);

var re2 = /[^-]{1}\d+/g;
var obj2 = str.match(re2);
for(var n = 0; n < obj2.length; n++){
obj2[n] = obj2[n].slice(1, obj2[n].length+1);}

var re3 = /\d+/g;
var obj3 = str.match(re3);
//не брать 0 элемент

Первый способ - самый эффективный и решает Вашу задачу. Второй способ - немножко корявый, ищет число с первым символом и потом удаляет его в каждом элементе объекта obj2.
Третий способ - ну мне кажется Вы могли воспользоваться этим способом. Выдает 4 числа: "1", "2008", "3" и "7". Тут просто надо не брать 0 элемент в массиве-объекте obj3.
(Можете "+" поставить:)).

рони 26.03.2016 21:48

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

Almag13 27.03.2016 20:48

Работает!

Еще есть вопросик...
Та же самая строка нахожу все знаки -_= использую регулярку такого типа

var reSec2 = /[-_=]?/g;
var secString2 = string.match(reSec2);


Как найти например каждое второе подчеркивание?
Будет нежадный поиск, но как отсеять каждый второй или каждый третий?

Almag13 27.03.2016 20:52

Когда мы используем такую экспу
{1,3}


Она работает по разному для каждого выражения?
Получается если мы указываем числа
[0-9]{1,3}
- То мы находим числа от 1 до трех
А когда такое выражение
[A-Z]{1,3}
- то три буквы после?

Almag13 28.03.2016 03:51

нашел решение хотя не регуляркой... Мы на выходе получаем массив... вот пройдя массив через цикл можем отсечь не нужный выбор )

Strongman 28.03.2016 10:15

Ставьте мне "+" за работу, а то я всем расскажу, что Алмаг не работает. Кстати, это реклама. Алмаг не лечит человека. Магнитное поле вообще никак не влияет на человеческий организм.


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