我是 javascript 新手,所以如果我错过了一些简单的东西,我深表歉意。我正在编写一个脚本,从表格中的一个单元格中获取字符串,将 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);
}
}
我尝试了很多变体,但没有成功。我觉得有一种更简单的方法可以从我已经拥有的东西中实现我正在寻找的东西。任何建议将不胜感激。
谢谢!
最佳答案
要执行此类操作,您可以使用 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);
关于javascript - 使用正则表达式用修改后的数字替换字符串中的数字 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473935/