gpt4 book ai didi

javascript - 正则表达式将算术表达式分成几部分

转载 作者:行者123 更新时间:2023-11-28 18:23:17 25 4
gpt4 key购买 nike

我正在创建一个计算器,在其中从输入字段获取字符串。例如,该字符串可以是 2+3*9/3-6

现在我想先执行乘法和除法运算,所以我会得到2+ 9 -6,其中9将是更高优先级操作的答案。

到目前为止我已经做到了这一点。这是一个完整的功能:

function calculateResult(){
var higher = /(\d+[*\/]\d+)/g;
calstr = $('#input-display').val();
var m = '*';
var res = calstr.split(higher);
console.log(res.length+ ' : ' + res);
// console.log(res);
if(res.length > 2){
console.log('split success');
var index = 0;
do{
for(var i = 1; i < res.length; i+=2){
var a = res[i].split(/([0-9\.]+)/g);
console.log('before calculation : '+calstr);
var regex = RegExp('(?:.*?(\\d+[*\/]\\d+)){' + i + '}');
console.log('regex generated : '+regex);
if(a[2] == '*'){
calstr = calstr.replace(regex , Number(a[1])*Number(a[3]));
}
else if(a[2] == '/'){
calstr = calstr.replace(regex , Number(a[1])/Number(a[3]));
}
console.log('replaced result : ' + calstr);
console.log('replaced result at : ' + calstr.search(regex));
}
// console.log('result : ' + calstr);
console.log('multiplication complete');
res = calstr.split(higher);
console.log('result is : '+res);
}while(res.length > 2);
}
else if(res.length == 1)
console.log('split failed');
}

当我尝试替换字符串内的结果时,替换成功。但在某些输入上,它替换了作为参数传递给该函数的整个字符串,这不是我想要的。

我做错了什么?

如果仍有不清楚的地方,我很乐意提供澄清。

在乘法和除法运行顺利之后,我计划更改这些正则表达式,以添加对加法和减法的支持。它将使用相同的代码,但下次运行优先级较低的运算符。

最佳答案

仅评估输入不是更简单吗?

function doEval() {
try {
alert(eval(document.querySelector('input').value));
} catch (error) {
alert('Invalid input: ' + error);
}
}
<input type='text' value='1+(4-3)*10/5' />
<input type='button' onclick='doEval();' value='Eval' />

关于javascript - 正则表达式将算术表达式分成几部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39566928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com