我正在创建一个计算器,其中我从输入字段获取一个字符串。该字符串可能是例如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');
}
当我尝试替换字符串内部的结果时,替换成功。但是在一些输入中,它将整个字符串替换为这个函数的参数,这不是我想要的。
我做错了什么?
如果仍然不清楚,我很乐意澄清。
经过乘法和除法运行后,我打算改变这些正则表达式,加入对加减法的支持。它将使用相同的代码,但对于较低优先级的运算符则需要下一次运行。
它会一直更好,如果你将针点更短的代码snipset实际上失败。 请注意,你是否需要自己做表达式解析或者简单地调用eval(_your_string_)就足够了?[link](http://www.w3schools.com/jsref/jsref_eval.asp) –
这没有什么可做的与jQuery。你只用它来获取输入字符串('$('#input-display')。val();'),这与问题无关。 – trincot
另请参阅http://stackoverflow.com/questions/32982719/chrome-app-doing-maths-from-a-string/ – guest271314