我有一个这样的字符串:
var data ="(1+2*(3+2))";
我试图解析字符串,以获得适当的结果。但是我仍然没有得到任何解决方案,任何想法?
预期结果= 11
答案 0 :(得分:6)
试
var result = eval(data);
虽然eval可能是邪恶的,但情况并非总是如此
答案 1 :(得分:2)
只要您100%确定输入绝对安全,您就可以直接使用eval:
string[] recipients = txtTo.Split(',');
foreach (string recipient in recipients)
{
mailMsg.To.Add(recipient );
}
但是,如果你不相信输入,你可以考虑找到一个不同的解决方案(仍然使用eval),就像用户Kennebec在这里提出的那样:
甚至更好,您可以考虑使用第三方库,例如mathjs:
你不应该使用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);
};