我有一个接收类似'5 + 10 * 4'
的字符串的函数,然后使用eval(string)
对其进行评估,返回结果。代码有效,但我遇到了问题,有时字符串可能有'√'
值;例如:'4 * √64 + 10'
。这使eval()
函数崩溃。如何将'4 * √64 + 10'
转换为'4 * Math.sqrt(64) + 10'
。
答案 0 :(得分:1)
首先,请注意不要让eval
执行任意的,未经过优化的JavaScript。 XSS攻击可能非常讨厌。
其次,使用正则表达式。
function solve(math) {
return Number(eval(math.replace(/√(\d+)/g, 'Math.sqrt($1)')));
}
console.log(solve('4 * √64 + 10'));
如果你还需要能够采用任意嵌套表达式的平方根,你需要一个实际的解析器,在这种情况下你应该使用一个能够评估解析过的数学表达式的库,比如{{ 3}}