//字符串形式比较
let num = "return 19726.94 == 4561.33+15165.61"
//获取字符串中的数字
extractNumber(str) {
// 匹配整数、小数、正负号
const regex = /-?\d+(\.\d+)?/g;
// 匹配结果
const matches = str.match(regex) || [];
// 返回匹配到的数字数组
return matches.map(Number);
}
//获取数字数组中最大的小数位数,用于扩大的倍数,使整个比较式中的数字全为整数
getMaxDecimalPlaces(numbers) {
let maxPlaces = 0;
for (let i = 0; i < numbers.length; i++) {
const num = numbers[i];
const decimalPlaces = (num % 1 !== 0) ? num.toString().split('.')[1].length : 0;
if (decimalPlaces > maxPlaces) {
maxPlaces = decimalPlaces;
}
}
return maxPlaces;
}
//对字符串中的数字进行操作,将字符串中的数字进行替换,其中modifyNumber为一个方法
modifyNumbersInString(str, modifyNumber) {
// 正则表达式匹配整数和小数
const numberRegex = /-?\d+(\.\d+)?/g;
// 替换函数,用于修改匹配到的数字
const replaceNumber = (match) => {
const num = parseFloat(match);
return modifyNumber(num).toString();
};
// 替换字符串中的数字
return str.replace(numberRegex, replaceNumber);
}
//使用
let vals = this.extractNumber(num)
let maxPlaces = this.getMaxDecimalPlaces(vals);
let result = this.modifyNumbersInString(matchExpression, (num) => (num * pow).toFixed(2));
//执行字符串中的表达式
var func = new Function(result);
let check_result = func();
console.log(check_result)