Я создаю калькулятор, в котором я получаю строку из поля ввода. Эта строка может быть, например, 2+3*9/3-6
.Regex для разделения арифметического выражения на части
Теперь я хочу выполнить операции умножения и деления сначала , поэтому я получу 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