我有以下代码,将输入字段中的字符转换为其他字符(即,输入e或e并将其转换为3,同样用于t或t转换为7)。
我也在计算被转换的字符的百分比,但我的计算没有正确执行,想知道是否有人可以帮助这一点。
例如,如果有人输入一个像373这样的字符串,它将不会转换字符(如预期的那样),但是转换的字符数将是3,而它们应该是0。
function ReplaceChars() {
var json = JSON.parse(localStorage.getItem("registration"));
var characters = json['charsEntered'];
var total = "";
var convertedPct = 0;
const result = characters
.replaceAll(/e|E/g,"3")
.replaceAll(/t|T/g,"7")
total = characters.length;
let x = Number((result.match(/3|7/g)||[]).length);
let y = Number(total);
convertedPct = (x/y)*100
roundedPercentage = convertedPct.toFixed(2);
$("#charsConverted").val(result);
$("#convertedChars").val(x);
$("#totalChars").val(y);
$("#pctChars").val(roundedPercentage + "%");
}
您可以在替换也会计数的字符时传递一个函数
let totalReplacements = 0;
characters
.replace(/e|E/g, () => {
totalReplacements ++;
return '3';
})
.replace(/t|T/g, () => {
totalReplacements ++;
return '7'
})
现在totalrepalments将保存已完成的替换的总数。
convertedPct = (totalReplacements / characters.length) * 100
roundedPercentage = convertedPct.toFixed(2);
您正在匹配结果,其匹配的值可能是更改或未更改的字符的混合。源文件中匹配的值都将被更改。
变化:let x = Number((result.match(/3|7/g)||[]).length);
To:let x = (json.charsEntered.match(/[etET]/g)||[]).length;