<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>suanshu</title>
<!-- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> -->
<script type="text/javascript">
var pattBrackets = /\([^\(\)]*\)/gm;
function main () {
var testStr = '1+4+(22+33)*((4+7)/6)+(3*4+(4+5))+100';
//console.log('source:',testStr)
var tempArrBrackes = [];
var temp3MArr = [];
var subArr = [];
var regExpShow = document.getElementById('regExp');
regExpShow.innerHTML = regExpShow.innerHTML + '<br>算式: ' +testStr;
//解析出 括号中的内容
while(subArr = testStr.match(pattBrackets)) {
for (var i = 0;i < subArr.length ; i++)
{
var name = getName();
tempArrBrackes.push({name:name, formula:subArr[i].substring(1,subArr[i].length - 1)});
testStr = testStr.replace(subArr[i], name);
}
}
tempArrBrackes.push({name:getName(), formula:testStr});
//把没有括号的 算式的 数组 解析成 a+b=n的树
for (var i = 0; i < tempArrBrackes.length ; i++)
{
var mArr = getStrByParrt(tempArrBrackes[i].formula, tempArrBrackes[i].name);
if (mArr)
{
temp3MArr = temp3MArr.concat(mArr);
}
}
//计算 并 将结果树打印到页面
var tree = getValue(temp3MArr);
for (var key in tree)
{
regExpShow.innerHTML = regExpShow.innerHTML + '<br>'+key+': ' + tree[key].formula + ' = ' +tree[key].value;
}
}
//解析最简单的 计算式 a + b = n
var pattArr = [/n{0,1}\d+\*{1}n{0,1}\d+/
,/n{0,1}\d+\/{1}n{0,1}\d+/
,/n{0,1}\d+\+{1}n{0,1}\d+/
,/n{0,1}\d+\-{1}n{0,1}\d+/];
var pattD = /[\+\-\*\/]/gm;
function getStrByParrt (iStr, iName) {
//console.log('----------------------------:',iStr);
var ret = [];
var subStr = [];
for (var i = 0; i < pattArr.length; i++)
{
while(subStr = iStr.match(pattArr[i])) {
if (iStr.match(pattD).length == 1)
{
ret.push({name:iName, formula:subStr[0]});
break;
}
var name = getName();
ret.push({name:name, formula:subStr[0]});
iStr = iStr.replace(subStr, name);
}
}
//console.log('pattD',ret.toString())
return ret;
}
// 计算式 算值
function getValue (m3Arr) {
var retTree = {};
for (var i = 0; i < m3Arr.length ; i++)
{
var formula = m3Arr[i].formula;
var name = m3Arr[i].name;
var sign = formula.match(pattD)[0];
var params = formula.split(sign);
retTree[name] = {
formula : formula
,value : ''
};
switch(sign){
case '+' : retTree[name].value = getValueFromTree(retTree, params[0]) + getValueFromTree(retTree, params[1]); break;
case '-' : retTree[name].value = getValueFromTree(retTree, params[0]) - getValueFromTree(retTree, params[1]); break;
case '*' : retTree[name].value = getValueFromTree(retTree, params[0]) * getValueFromTree(retTree, params[1]); break;
case '/' : retTree[name].value = getValueFromTree(retTree, params[0]) / getValueFromTree(retTree, params[1]); break;
}
}
return retTree;
}
// 字符串 转数字 变量不转
function getValueFromTree(tree, name) {
var value = '';
if (name.indexOf('n') >=0)
{
value = parseFloat(tree[name].value);
} else {
value = parseFloat(name);
}
return value;
}
//取变量名
var nameIndex = 0;
function getName () {
return 'n' + nameIndex++;
}
</script>
</head>
<body onload=''>
<div id='show' style='height:30px'>'1+4+(22+33)*((4+7)/6)+(3*4+(4+5))+100'</div>
<input type='button' value='jisuan' onclick='main()'>
<div id='regExp'></div>
</body>
</html>
相关推荐
标题“解析四则运算”可能是指探讨编程语言中如何实现基本的数学运算,如加法、减法、乘法和除法。这类话题通常与计算机科学的基础知识有关,特别是编程语言的设计和解释器的工作原理。在本文中,我们将深入探讨四则...
本项目是一个基于JavaScript开发的逆波兰表达式解析库,用于实现四则运算的计算器。 在逆波兰表达式中,一个表达式如 "2 + 3 * 4" 将被转换为 "2 3 4 *" 的序列,这样计算器只需依次读取数字和操作符,遇到操作符时...
在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析。 一、熟悉概念 中缀表示法(或中缀记法)是一个通用的算术或逻辑公式表示方法, ...
使用逆波兰表达式实现的四则运算解析库、计算器(JavaScript) 功能 任意顺序的四则+-*/运算 支持() 前端后端通用 提供直接计算函数 提供四则运算表达式转逆波兰AST函数 提供语法分析函数(暂时只支持上下两个字符...
四则运算表达式计算器可以用多种编程语言实现,如Python、Java、C++、JavaScript等,每种语言都有其特有的数据结构和语法来支持这种计算。 通过以上步骤,我们可以创建一个能够处理任意长度四则运算表达式的计算器...
在JavaScript中,括号用于改变运算顺序,表达式`a * (b + c)`会先计算括号内的`b + c`,然后将结果与`a`相乘。乘方运算(**)的优先级高于乘法和除法,而加法和减法的优先级相同,从左到右进行计算。求余运算(%)是...
后缀表达式的求值非常简单,只需一个栈即可,因为每个操作数遇到后立即压栈,遇到运算符时,弹出栈顶的两个操作数进行运算,并将结果压回栈。对于"2 3 4 *",先将2和3压栈,然后遇到"*",弹出3和2相乘得到12,再将12...
在JavaScript实现简单的四则运算计算器完整实例中,主要介绍了如何使用JavaScript语言编写一个简单的计算器程序,实现基本的数学运算:加、减、乘、除。这一实例通过结合HTML和JavaScript的表单元素,向用户展示了...
1、原码、反码、补码,正数减法转补码加法 js 在进行二进制运算时,使用 32 位二进制整数,由于 js 的整数都是有符号数,最高位0表示正数,1表示负数,因此,js 二进制运算中使用的整数表达范围是 代码如下: -Math....
四则运算的实现通常涉及服务器端和客户端的交互。客户端使用`Scanner`类获取用户输入的表达式,然后通过`DatagramSocket`发送到服务器端。服务器端接收到数据后,可以使用Java的内置`ScriptEngine`接口,如`...
4. **四则运算逻辑**:在JavaScript中,四则运算非常直观,如`num1 + num2`表示加法,`num1 - num2`表示减法,`num1 * num2`表示乘法,`num1 / num2`表示除法。但需要注意的是,JavaScript中除法可能导致浮点数结果...
这个过程相对简单,只需要遍历后缀表达式,遇到数字直接压栈,遇到运算符则取出栈顶两个操作数进行运算并将结果压回栈中。最后栈中的元素即为表达式的值。 JavaScript代码示例: ```javascript function toPostfix...
《深入理解moment.js:时间格式化与运算工具包》 在Web前端开发中,处理日期和时间是一项常见的任务。为了简化这一过程,开发者们通常会借助于一些强大的库,其中moment.js就是一个广受欢迎的选择。本文将详细介绍...
标题中的“强大的JavaScript反混淆小工具”是指专门用于解析和格式化混淆JavaScript代码的实用程序。这种工具能够将混乱不堪、难以理解的混淆代码转换为清晰、易读的形式,极大地提高了代码的可读性和分析效率。 ...
jsep:微小JavaScript表达式解析器是一个用JavaScript编写的简单表达式解析器。 它可以解析JavaScript表达式,但不能解析操作。 表达式和运算之间的差异类似于Excel电子表格中的单元格与适当JavaScript程序之间的...
本题目要求实现一个能够解析并计算包含四则运算(加减乘除)和括号的数学表达式的程序。计算结果需要以最简分数的形式给出,如果在计算过程中出现除数为0的情况,则应返回"ERROR"。此外,题目还明确了几个关键点: -...
7. **数值计算**:最后,解析器使用这些解析好的结构进行实际的数学计算,可能涉及浮点数运算、复数运算、矩阵运算等,这需要用到JavaScript的内置数学函数。 8. **错误处理**:公式可能包含语法错误或无效的数学...
在JavaScript库rpn.js-master中,可能包含了一个名为`rpn.js`的源文件,它实现了这个转换算法。该库可能提供了一个函数接口,接受一个中缀表达式字符串作为输入,返回对应的后缀表达式字符串。在实际应用中,这个库...