Замена чисел в строке измененным числом с помощью регулярных выражений - Javascript - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в javascript, поэтому прошу прощения, если я пропустил что-то простое.Я работаю над сценарием, чтобы взять строку из одной ячейки в Sheets, добавить НДС в 5% к любым применимым числам и вывести исправленную строку в новую ячейку.Я доволен, что регулярное выражение записывает нужные мне числа, но получить правильную измененную строку оказывается сложно.

Пока что скрипт выглядит так:

function strReplace() {
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getActiveSheet();
   var str = sheet.getRange(4,2).getValue(); // A cell with a string like this: "ID: 10101010101010 | Price 1: £4.54 | Price 2: £2.87"

   var regex = /\d{1,8}(?:\.\d{1,8})/g  // Regex to ignore numbers greater than 8 digits, including decimals

   var newStr = str.match(regex);


   for (var x = 0; x < newStr.length; x++) {

    var newRates = newStr[x]*1.05;
    var output = str.replace(newStr, newRates)

    sheet.getRange(4,3).setValue(output);

    }                   
  }  

Я пробовалкуча вариантов, но безуспешно.Я чувствую, что есть более простой способ добиться того, что я ищу, из того, что у меня уже есть.Любые рекомендации будут высоко оценены.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

в основном ваше решение очень близко, вам просто нужно было присвоить str.replace, использовать newStr[x], а также дождаться окончания for, чтобы назначить его в ячейку.

проверить образецниже.

function strReplace() {

  let str = "ID: 10101010101010 | Price 1: £4.54 | Price 2: £2.87";
  var regex = /\d{1,8}(?:\.\d{1,8})/g

  var newStr = str.match(regex);

  for (var x = 0; x < newStr.length; x++) {
    var newRates = parseFloat(newStr[x]) * 1.05;
    str = str.replace(newStr[x], newRates)
  }

  return str;
}

var replaced = strReplace();

console.log(replaced)
0 голосов
/ 22 мая 2018

Чтобы делать подобные вещи, вы используете функцию обратного вызова функции replace:

var str = "ID: 10101010101010 | Price 1: £4.54 | Price 2: £2.87";
var regex = /\d{1,8}(?:\.\d{1,8})/g;  // Regex to ignore numbers greater than 8 digits, including decimals
var output = str.replace(regex, function(match) {
    return 1.05 * match;
});
console.log(output);

Вы можете использовать parseFloat(match), а не просто match, что зависит от * приведения строки к номеру.

Ивы можете рассмотреть .toFixed(2), чтобы результат округлился и отформатировался в два места (в зависимости от того, хотите ли вы округлить, как оно округляется).Например:

var str = "ID: 10101010101010 | Price 1: £4.54 | Price 2: £2.87";
var regex = /\d{1,8}(?:\.\d{1,8})/g;  // Regex to ignore numbers greater than 8 digits, including decimals
var output = str.replace(regex, function(match) {
    return (1.05 * match).toFixed(2);
});
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...