将字符串解析为值 - 计算

时间:2015-07-04 07:36:57

标签: javascript jquery

我有一个这样的字符串:

var data ="(1+2*(3+2))";

我试图解析字符串,以获得适当的结果。但是我仍然没有得到任何解决方案,任何想法?

预期结果= 11

2 个答案:

答案 0 :(得分:6)

var result = eval(data);
虽然eval可能是邪恶的,但情况并非总是如此

答案 1 :(得分:2)

只要您100%确定输入绝对安全,您就可以直接使用eval:

string[] recipients = txtTo.Split(',');
foreach (string recipient in recipients)
{
     mailMsg.To.Add(recipient );
}

http://jsfiddle.net/kxy3hwh9/

但是,如果你不相信输入,你可以考虑找到一个不同的解决方案(仍然使用eval),就像用户Kennebec在这里提出的那样:

Eval alternative

甚至更好,您可以考虑使用第三方库,例如mathjs:

http://mathjs.org/

你不应该使用eval的原因实际上很多,但只要你确定你可以控制输入的流量,只要你绝对确定用户不能使用eval进行任何邪恶范围你也可以安全地使用eval。

无论如何,因为mathjs存在,如果您需要进一步计算,我个人建议您使用mathjs。

在mathjs的情况下,代码将是这样的:

var data ="(1+2*(3+2))";
var res = eval(data);

小提琴: http://jsfiddle.net/jLxkn7no/

另外,作为旁注,要使用mathjs库,您只需要包含一个脚本,它就可以作为cdn使用: http://cdnjs.com/libraries/mathjs

编辑:

如果你不是DL; DR;读者,请随时阅读以下内容:

如果您对常规var data ="(1+2*(3+2))"; var res = math.eval(data); mathjs eval()之间的差异感到好奇,以下是直接从源代码中获取的代码段:

eval

和_parse:

/**
       * Parse and evaluate the given expression
       * @param {String} expr   A string containing an expression, for example "2+3"
       * @return {*} result     The result, or undefined when the expression was empty
       * @throws {Error}
       */
      Parser.prototype.eval = function (expr) {
        // TODO: validate arguments
        return _parse(expr)
            .compile(math)
            .eval(this.scope);
      };