如何在javascript中用regex解析一个简单的算术运算



我正在使用AngularJS制作主页,并且有算术函数。

<div class="input-form">
<input ng-model="value1" id="value1" type="number" />
<input ng-model="value2" id="value2" type="number" />
<input ng-model="value3" id="value3" type="number" />
<input ng-model="value4" id="value4" type="number" />
<input ng-model="value5" id="value5" type="number" />
</div>
<div class="equation-form">
<input ng-model="equation" type="text" />
</div>
<button class="yellow" ng-click="calculate()">Calculation</button>

如果用户按下";计算";按钮将算术方程式输入到方程式字段后,需要计算结果并发送给服务器。

方程输入,如"1 + 2 - 3 * 4 + 5"

1,2,3,4,5值表示输入值,命名为value1、value2、value3、value4、value5

以下是我试图实现的计算:

scope.calculate = function () {
let equation = scope.equation.replace(/s+/g, ''); // remove spaces

if (!/^d+(?:[+-]d+)*$/.test(expression)) { //
console.error('wrong equation');
return;
}
let fieldIndexes = expression.split(/(?=[+-])/); // split expression
if (fieldIndexes) {
fieldIndexes.forEach(x => {
// process calculation
});
}
}

功能分两步完成:

首先,将方程拆分为[1,+2,-3,*4,5]。

其次,计算分裂方程。

但现在,我只以"-&"&";。如果用户输入"1 + 2 - 3 + 4 - 5",则当前函数将其拆分为"1", "+2", "-3", "+4", "-5"

我怎样才能用"-&"&"&""象征

有什么建议吗?

好吧,我写了一些不使用RegExp的东西。

class Operation {
constructor(data) {
this.data = data;
}
result(items = null) {
for (var i = 0; i < items.length; i++) {
items[i] = items[i].split(this.data.op);
if (this.data.next) {
items[i] = this.data.next.result(items[i]);
}
items[i] = items[i].reduce(this.data.reducer);
}
return items;
}
}
function calculate(expr) {
var mult = new Operation({ op: "*", next: null, reducer: (f, l) => { return parseInt(f) * parseInt(l) } });
var div = new Operation({ op: "/", next: mult, reducer: (f, l) => { return parseInt(f) / parseInt(l) } });
var sub = new Operation({ op: "-", next: div, reducer: (f, l) => { return parseInt(f) - parseInt(l) } });
var add = new Operation({ op: "+", next: sub, reducer: (f, l) => { return parseInt(f) + parseInt(l) } });
return add.result([expr.replace(/s+/g, "")])[0];
}

您为计算函数提供算术表达式,它会为您返回结果。每个操作层将操作数-";项目"-到下一个更高阶运算,直到它到达最后一个(这里是乘法(。

示例:console.log(计算("6*5-2"(;

现在添加括号应该很简单。

这有帮助吗?

最新更新