使用正则表达式替换带有修改数字的字符串中的数字 - Javascript

时间:2018-05-22 18:05:11

标签: javascript regex google-apps-script replace

我是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 :(得分:1)

要执行此类操作,请使用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);对结果进行舍入并格式化为两个位置(取决于你是否想要绕过它的方式)。例如:

{{1}}

答案 1 :(得分:1)

基本上你的解决方案非常接近,你只需要分配str.replace,使用newStr[x]并等待结束for将其分配到单元格中。

检查下面的示例。

&#13;
&#13;
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)
&#13;
&#13;
&#13;