JavaScript基于正则实现简单算术表达式解析的方法
正则规则调整方案
- 修复代码基础变量错配
现有代码里定义了equation变量存储去空格后的表达式,但后续校验、拆分逻辑里误用了未定义的expression变量,运行时会直接抛出引用错误,需要先把这部分变量名统一。 - 调整格式校验正则
原有校验正则/^\d+(?:[+-]\d+)*$/仅支持加减运算符的格式匹配,需要把乘除运算符加入匹配字符集,调整为:
该规则可覆盖“开头为数字,后续重复出现单运算符+数字”的四则运算表达式格式校验。/^\d+(?:[+\-*/]\d+)*$/ - 调整表达式拆分正则
原有拆分逻辑使用正向先行断言/(?=[+-])/,仅在紧邻+、-运算符的位置做切分,只需把字符集扩展为完整的四则运算符集合(注意转义/字符),调整为:
调整后对去空格的表达式执行拆分,可得到预期格式的结果:比如输入/(?=[+\-*/])/1+2-3*4/5,会被正确拆分为["1", "+2", "-3", "*4", "/5"]。
实现注意事项
- 单纯按顺序计算拆分后的片段会忽略四则运算优先级,拿到拆分结果后需要先遍历计算所有带*、/的片段得到中间值,再合并所有中间值做加减运算,才能得到正确的算术结果
- 按照原本的需求,表达式里的数字1-5是对应输入框的绑定值,遍历拆分片段时需要提取片段中的数字序号,映射为
scope.value1到scope.value5的实际输入值参与计算,不要直接使用片段内的字面数字做运算
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

