這裏有一個簡單的表達式求值:
function evalExpression(text)
{
var tokens = text.split(" ");
var output = [];
var operators = [];
var reNumber = /^\d+(\.\d+)?$/;
var reOperator = /^[\/\+\*\-]$/;
var precedence = { "+": 1, "-": 1, "*": 2, "/": 2 };
for (var i = 0; i < tokens.length; ++i)
{
var t = tokens[i];
if (reNumber.test(t))
output.push(Number(t));
else if (reOperator.test(t))
{
while (operators.length && precedence[t] <= precedence[operators[operators.length - 1]])
{
output.push(operators.pop());
}
operators.push(t);
}
else if (t == "(")
operators.push(t);
else if (t == ")")
{
while (operators.length && operators[operators.length - 1] != "(")
output.push(operators.pop());
if (!operators.length) return false;
operators.pop();
}
else
return false;
}
while (operators.length)
output.push(operators.pop());
var result = [];
for (i = 0; i < output.length; ++i)
{
t = output[i];
if (reNumber.test(t))
result.push(t);
else if (t == "(" || result.length < 2)
return false;
else
{
var lhs = result.pop();
var rhs = result.pop();
if (t == "+") result.push(lhs + rhs);
if (t == "-") result.push(lhs - rhs);
if (t == "*") result.push(lhs * rhs);
if (t == "/") result.push(lhs/rhs);
}
}
return result.pop();
}
它支持號碼和+ - */()
。令牌必須由一個空格分隔,例如:「1 *(2 + 3)」
無論如何,如果您不想使用eval
,那麼這就是您需要的代碼類型。
jQuery不會幫你在這裏。 – Gumbo 2010-03-10 23:11:30
jQuery和這有什麼關係? – Tin 2010-07-08 02:33:38
對於未來讀者想知道與錫相同的東西,jQuery是原始標題和標籤的一部分。 – 2013-09-09 20:36:39