将具有'√'的字符串转换为可以赋予给eval()的字符串。

将具有'√'的字符串转换为可以赋予给eval()的字符串。

问题描述:

我有一个函数接收像'5 + 10 * 4'这样的字符串,然后用eval(string)返回结果来评估它。代码有效,但我遇到问题,有时字符串可能有'√'值;例如:'4 * √64 + 10'。这使得eval()功能崩溃。如何将'4 * √64 + 10'转换为'4 * Math.sqrt(64) + 10'将具有'√'的字符串转换为可以赋予给eval()的字符串。

+0

使用正则表达式...... – mehulmpt

首先要注意的是,您的eval不允许执行任意的,未经过处理的JavaScript。 XSS攻击可能非常令人讨厌。

其次,使用正则表达式。

function solve(math) { 
 
    return Number(eval(math.replace(/√(\d+)/g, 'Math.sqrt($1)'))); 
 
} 
 

 
console.log(solve('4 * √64 + 10'));

如果您需要能够也采取任意嵌套的表达式的平方根,您将需要一个实际的解析器,在这种情况下,你应该使用其配备到库还要评估解析的数学表达式,如math.js