将具有'√'的字符串转换为可以赋予给eval()的字符串。
问题描述:
我有一个函数接收像'5 + 10 * 4'
这样的字符串,然后用eval(string)
返回结果来评估它。代码有效,但我遇到问题,有时字符串可能有'√'
值;例如:'4 * √64 + 10'
。这使得eval()
功能崩溃。如何将'4 * √64 + 10'
转换为'4 * Math.sqrt(64) + 10'
。将具有'√'的字符串转换为可以赋予给eval()的字符串。
答
首先要注意的是,您的eval
不允许执行任意的,未经过处理的JavaScript。 XSS攻击可能非常令人讨厌。
其次,使用正则表达式。
function solve(math) {
return Number(eval(math.replace(/√(\d+)/g, 'Math.sqrt($1)')));
}
console.log(solve('4 * √64 + 10'));
如果您需要能够也采取任意嵌套的表达式的平方根,您将需要一个实际的解析器,在这种情况下,你应该使用其配备到库还要评估解析的数学表达式,如math.js。
使用正则表达式...... – mehulmpt