Регулярное выражение начинается не с той строки...
Всем привет!
Есть строка 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; |
Я изобрел 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. (Можете "+" поставить:)). |
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); |
Работает!
Еще есть вопросик... Та же самая строка нахожу все знаки -_= использую регулярку такого типа var reSec2 = /[-_=]?/g; var secString2 = string.match(reSec2); Как найти например каждое второе подчеркивание? Будет нежадный поиск, но как отсеять каждый второй или каждый третий? |
Когда мы используем такую экспу
{1,3} Она работает по разному для каждого выражения? Получается если мы указываем числа [0-9]{1,3}- То мы находим числа от 1 до трех А когда такое выражение [A-Z]{1,3}- то три буквы после? |
нашел решение хотя не регуляркой... Мы на выходе получаем массив... вот пройдя массив через цикл можем отсечь не нужный выбор )
|
Ставьте мне "+" за работу, а то я всем расскажу, что Алмаг не работает. Кстати, это реклама. Алмаг не лечит человека. Магнитное поле вообще никак не влияет на человеческий организм.
|
Часовой пояс GMT +3, время: 08:42. |