Добрый день, дорогие друзья. Имеется строка "На пробеге до 45км расход топлива увеличивается на 2%, а при пробеге от 90км, пробег увеличивается на 2.5%" Требуется вычленить все процентные характеристики, прибавить к ним 1 и вернуть обратно строку с новыми параметрами. Т.Е. должно получиться : "На пробеге до 45км расход топлива увеличивается на 3%, а при пробеге от 90км, пробег увеличивается на 3.5%" Понимаю, что нужно пользоваться регулярками
/\d?\.?\d*%/g
Получаю массив всех значений, удаляю %, парсю как число, прибавляю 1, но как обратно засунуть эти значения в строку?
Предлагаю использовать * вместо первого ?, чтобы находить числа полностью, добавить группу для захвата самого числа и использовать функцию обратного вызова в качестве аргумента замены:
var rx = /(\d*\.?\d+)%/g;
var str = "На пробеге до 45км расход топлива увеличивается на 2%, а при пробеге от 90км, пробег увеличивается на 2.5%";
var res = str.replace(rx, function ($0, $1) {
return (Number($1) + 1) + "%";
});
console.log(res);
В функции обратного вызова $0 - это целое совпадение, $1 - значение первой захватывающей группы и т.д.
Чтобы увеличить все остальные числовые значения, можно расширить шаблон и дополнить код следующим образом:
var rx = /(\d*\.?\d+)(\s*(?:[кмсг]м|%))/g;
var str = "На пробеге до 45км расход топлива увеличивается на 2%, а при пробеге от 90км, пробег увеличивается на 2.5%";
var res = str.replace(rx, function ($0, $1, $2) {
return (Number($1) + 1) + $2;
});
console.log(res);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей