Javascript 将字符串解析为值-计算
我有这样一个字符串:Javascript 将字符串解析为值-计算,javascript,jquery,Javascript,Jquery,我有这样一个字符串: var data ="(1+2*(3+2))"; var data ="(1+2*(3+2))"; var res = math.eval(data); 我试图解析字符串,以获得适当的结果。但我还是没有得到任何解决方案,任何想法 预期结果=11尝试 var result = eval(data); 虽然eval可能是邪恶的,但情况并非总是如此只要您100%确信输入是绝对安全的,您就可以直接使用eval: var data ="(1+2*(3+2))"; var res
var data ="(1+2*(3+2))";
var data ="(1+2*(3+2))";
var res = math.eval(data);
我试图解析字符串,以获得适当的结果。但我还是没有得到任何解决方案,任何想法
预期结果=11
尝试
var result = eval(data);
虽然eval可能是邪恶的,但情况并非总是如此只要您100%确信输入是绝对安全的,您就可以直接使用eval:
var data ="(1+2*(3+2))";
var res = eval(data);
但是,如果您不信任输入,您可以考虑寻找不同的解决方案(仍然使用eval),如用户Kennebec在此处提出的:
或者更好,您可以考虑使用第三方库,如mathjs:
您不应该使用eval的原因其实有很多,但只要您确信您可以控制输入流,并且只要您绝对确信用户不能将eval用于任何邪恶范围,您就可以安全地使用eval
无论如何,因为mathjs的存在,如果你需要进一步的计算,我个人推荐你mathjs
对于mathjs,代码如下所示:
var data ="(1+2*(3+2))";
var data ="(1+2*(3+2))";
var res = math.eval(data);
小提琴:
另外,作为补充说明,要使用mathjs库,您只需包含一个脚本,它可以作为cdn提供:
编辑:
如果你不是DL;博士读者,请随意阅读以下内容:
如果您对常规的eval()
mathjs的eval
之间的区别感到好奇,下面是直接取自源代码的代码片段:
/**
* 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);
};
和_parse:
/**
* Parse an expression. Returns a node tree, which can be evaluated by
* invoking node.eval();
*
* Syntax:
*
* parse(expr)
* parse(expr, options)
* parse([expr1, expr2, expr3, ...])
* parse([expr1, expr2, expr3, ...], options)
*
* Example:
*
* var node = parse('sqrt(3^2 + 4^2)');
* node.compile(math).eval(); // 5
*
* var scope = {a:3, b:4}
* var node = parse('a * b'); // 12
* var code = node.compile(math);
* code.eval(scope); // 12
* scope.a = 5;
* code.eval(scope); // 20
*
* var nodes = math.parse(['a = 3', 'b = 4', 'a * b']);
* nodes[2].compile(math).eval(); // 12
*
* @param {String | String[] | Matrix} expr Expression to be parsed
* @param {{nodes: Object<String, Node>}} [options] Available options:
* - `nodes` a set of custom nodes
* @return {Node | Node[]} node
* @throws {Error}
*/
math.parse = function parse (expr, options) {
return _parse.apply(_parse, arguments);
}
};
/**
*解析表达式。返回一个节点树,可以通过
*调用node.eval();
*
*语法:
*
*解析(expr)
*解析(expr,选项)
*解析([expr1,expr2,expr3,…)
*解析([expr1,expr2,expr3,…],选项)
*
*例如:
*
*var node=parse('sqrt(3^2+4^2)');
*node.compile(math.eval();//5.
*
*变量范围={a:3,b:4}
*var node=parse('a*b');//12
*var code=node.compile(数学);
*代码。评估(范围);//12
*范围a=5;
*代码。评估(范围);//20
*
*var节点=math.parse(['a=3','b=4','a*b']);
*节点[2]。编译(数学)。eval();//12
*
*要分析的@param{String | String[]| Matrix}expr表达式
*@param{{nodes:Object}[options]可用选项:
*-`nodes`一组自定义节点
*@return{Node | Node[]}Node
*@throws{Error}
*/
math.parse=函数解析(expr,选项){
返回_parse.apply(_parse,arguments);
}
};
同意,评估适用于此处