网络上的html+js计算器大多是两个数字加一个运算符,不能实现输入长算式,这恰好是我学习中的一个任务,我就对长算式计算进行了js语言的简单实现。
页面部分十分简单,因为我的任务主要是后端开发:
<body>
输入算式:<input type="text" name="string" id="string" autocomplete="off"/>
<input type="button" value="计算" id="" onclick="calculate()"/>
<p id="result"> </p>
</body>
就是这么个简陋的页面:
其中,计算按钮触发js中calculate()函数,完成计算。
则js部分中,使用:
document.getElementById("string").value
读入字符串(输入的算式)。
使用:
document.getElementById("result").innerHTML
作为输出载体。
JS部分的编写,说实话还是与java有很大不同的,比如变量类型很随意,直接用var声明,而且一个数组里可以直接存多个类型的数据,方便处理。
处理算式需要多次使用正则表达式判断某个字符属于某个字符集,此项目使用的正则表达式如下:
const num=/[0-9]/;
const op=/[()/*\-+]/;
const spec=/[)/*+.]/;
const big=/[/*]/
const small=/[+\-]/
const fdm=/[(#]/;
下面开始处理数据,首先是将字符串处理为数字+运算符,存入队列中等待运算:
(比较啰嗦,但我实在想不到什么好方法了,大概也有一些疏漏,不过或许这个任务的目的就是借此熟悉一下各种语法吧)
var st=document.getElementById("string").value;
preIsOp=0;st="0+("+st+")+0";
for(var i=0;i<st.length;i++){
if(preIsOp==0&&spec.test(st.charAt(i))){
document.getElementById("result").innerHTML="连续输入符号或两端为运算符"; return 0;}
if(preIsOp==1&&st.