JS解析表达式
来源:互联网 发布:磁力链接解析源码 编辑:程序博客网 时间:2024/06/17 17:39
// var express = "num1+num2*(num3-num_4)";// var express = "num1+num2*(num3*(num_4-num5))";var express = "(num1+num2)*(num3*(num_4-num5))-78";// 以运算符为分组单位,提取变量(变量不可能连续出现,所以这样可以成功)var operatorReg = /[\(\)\+\-\*\/]/;var variables = express.split(operatorReg);var variablesLen = variables.length;var varArr = [];for(var i = 0; i < variablesLen; i++){if('' != variables[i]){varArr.push(variables[i]);}}variablesLen = varArr.length;//alert(varArr);// 以变量为单位提取,运算符(运算符有可能连续出现,所以下面的做法有问题)/*var variableReg = /[0-9a-zA-Z_]+/;var operators = express.split(variableReg);var operatorsLen = operators.length;var operArr = [];for(var i = 0; i < operatorsLen; i++){if('' != operators[i]){operArr.push(operators[i]);}}*///alert(operArr);var operArr = [];var pattern = new RegExp("[\\(\\)\\+\\-\\*\\/]", "g");var operIndex = [];while(pattern.test(express)){operIndex.push(pattern.lastIndex - 1);operArr.push(express.substr(pattern.lastIndex-1, 1));}var operatorsLen = operIndex.length;// alert(operIndex);// alert(operArr);// 将 varArr 计算之后还原回去var resStr = "";var i = 0;// 指示当前变量var j = 0; // 指示当前运算符var isVar = false; // 上一个是变量var expressLen = variablesLen + operatorsLen;for(var cnt = 0; cnt < expressLen; cnt++){// 当前操作数var ch = varArr[i];// 当前运算符var currOper = operArr[j];// 第一个符号if(0 == cnt){ // 说明运算符是第一个符号有可能是,括号()if(0 == operIndex[0]){resStr += currOper;isVar = false;j++;// 运算符下移一位}else{resStr += ch;isVar = true;i++;// 变量下移一位}continue;}if(isVar){// 上一个是变量resStr += currOper;isVar =false;j++;}else{// 上一个是运算符// 如果下一个符号和当前符号的索引连续,则仍然添加符号if(operIndex[j-1] == operIndex[j]-1){resStr += currOper;isVar = false;j++;// 运算符下移一位}else{resStr += ch;isVar = true;i++;// 变量下移一位}}}alert(resStr);
0 0
- JS解析表达式
- js : 正则表达式 -- 邮件地址验证解析
- JS正则表达式解析出网址中的域名部分
- JavaScript中的正则表达式解析[JS正则知识]
- js,php 使用正则表达式解析GPS数据
- 表达式解析
- 表达式解析
- 表达式解析
- 表达式解析
- 解析表达式
- quartz 调度表达式 js解析。常规使用足够。。W # C 表达式暂不支持。
- 表达式解析-后缀表达式
- js 解析
- js对象根据属性名表达式解析成新的对象
- 表达式解析及自动解析
- Angular表达式 vs. Js 表达式
- 正则表达式语法解析
- 数字表达式解析器
- An Empirical Study of Regression Test Selection Techniques
- 第五题
- Destroy Tunnels(矩阵水题)
- 指针详解
- 导入jar包在Eclipse中产看中文出现乱码的问题
- JS解析表达式
- 关联规则挖掘基本概念与Aprior算法
- linux查缺补漏之磁盘和文件系统
- JavaScript语言精粹学习笔记-对象
- JSON字符串key缺少双引号的解决方法
- XMPP聊天软件客户端开发(1)
- HDU 5011 Game Nim博弈 (涉及scanf和cin效率比较)
- Java中HashSet HashTable HashMap的区别
- 第六题