SOURCE

console 命令行工具 X clear

                    
>
console
$("#exp").on('keydown', function(event) {
  if (event.keyCode == 13) {
    $('#result').html(calInfixExpression($("#exp").val()));
  }
});

$("#eq").click(function() {
  $('#result').html(calInfixExpression($("#exp").val()));
})

var prioty = {
  "+": 1,
  "-": 1,
  "%": 2,
  "*": 2,
  "/": 2,
  "^": 3,
  "(": 0,
  ")": 0,
  "`": -1,
};

function doop(op, opn1, opn2) {
  switch (op) {
    case "+":
      return opn1 + opn2;
    case "-":
      return opn1 - opn2;
    case "*":
      return opn1 * opn2;
    case "/":
      return opn1 / opn2;
    case "%":
      return opn1 % opn2;
    case "^":
      return Math.pow(opn1, opn2);
    default:
      return 0;
  }
}

function opcomp(a, b) {
  return prioty[a] - prioty[b];
}

function calInfixExpression(exp) {
  var cs = [];
  var ns = [];
  var exp = exp.replace(/\s/g, "");
  exp += '`';
  if (exp[0] === '-') {
    exp = "0" + exp;
  }
  var c;
  var op;
  var opn1;
  var opn2;
  for (var i = 0; i < exp.length; ++i) {
    c = exp[i];
    if (c in prioty) {
      //op
      while (c != '(' && cs.length && opcomp(cs[cs.length - 1], c) >= 0) {
        op = cs.pop();
        if (op != '(' && op != ')') {
          opn2 = ns.pop();
          opn1 = ns.pop();
          ns.push(doop(op, opn1, opn2));
        }
      }
      if (c != ')') cs.push(c);
    } else {
      while (!(exp[i] in prioty)) {
        i++;
        c += exp[i];
      }
      ns.push(parseFloat(c));
      i--;
    }
  }
  return ns.length ? ns[0] : NaN;
}

$('#result').html(calInfixExpression($("#exp").val()));
<div class="container">
  <div class="panel panel-default">
    <div class="panel-heading">表达式运算</div>
    <div class="panel-body">
      <div class="expression">
        <label for='exp'>输入表达式:</label> <span class="label label-info">加+ 减- 乘* 除/ 乘方^ 求余%</span>

        <input id="exp" class="form-control" style="max-width:100%" rows="1" placeholder="输入表达式,如:1+3*4-2^3" value="1+3*4/2-2^3+5%2"></input>
      </div>
      <div class="btn-group">
        <button class="btn btn-default btn-sm" id="eq">
          =
        </button>
      </div>
      <div class="output" style="margin=5">
        <div class="well well-sm" id="result"></div>
      </div>
    </div>
    <div class="panel-footer">
      <div id="author">Author: <a href="http://wuzhiwei.net/about/" target="_blank">Tim Wu</a>

      </div>
    </div>
  </div>
</div>
.panel-heading {
  text-align: center;
}

#author {
  text-align: right;
}

#eq {
  margin-top: 5px;
  margin-bottom: 5px;
}

本项目引用的自定义外部资源