0
我有一個函數接收像'5 + 10 * 4'
這樣的字符串,然後用eval(string)
返回結果來評估它。代碼有效,但我遇到問題,有時字符串可能有'√'
值;例如:'4 * √64 + 10'
。這使得eval()
功能崩潰。如何將'4 * √64 + 10'
轉換爲'4 * Math.sqrt(64) + 10'
。將具有'√'的字符串轉換爲可以賦予給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