Прибавить к числам в строке

363
18 февраля 2017, 07:25

Добрый день, дорогие друзья. Имеется строка "На пробеге до 45км расход топлива увеличивается на 2%, а при пробеге от 90км, пробег увеличивается на 2.5%" Требуется вычленить все процентные характеристики, прибавить к ним 1 и вернуть обратно строку с новыми параметрами. Т.Е. должно получиться : "На пробеге до 45км расход топлива увеличивается на 3%, а при пробеге от 90км, пробег увеличивается на 3.5%" Понимаю, что нужно пользоваться регулярками

/\d?\.?\d*%/g

Получаю массив всех значений, удаляю %, парсю как число, прибавляю 1, но как обратно засунуть эти значения в строку?

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

READ ALSO
Как реализовать парсер на php для js [требует правки]

Как реализовать парсер на php для js [требует правки]

Добрый деньКак реализовать парсер на языке php, чтобы получить контент с сайта, который отдается js

336
Как спрятаться от ВК

Как спрятаться от ВК

Всем приветВКонтакте положил мой сайт в черный список

376
JS Удалить часть HTML кода

JS Удалить часть HTML кода

Как найти в коде страницы и удалить одинаковые фрагменты кода? Если быть точным - то вот такие фрагменты:

366
Invalid CSS after “…rder-bottom: 0;”: expected "

Invalid CSS after “…rder-bottom: 0;”: expected "

Получаю такую ошибку, при сборке проекта, на этапе компиляции css из sassНикак не пойму что это может означать ?

377