我有这个简单的计算器脚本,但它不允许电源 ^。
function getValues() {
var input = document.getElementById('value').value;
document.getElementById('result').innerHTML = eval(input);
}
<label for="value">Enter: </label><input id="value">
<div id="result">Results</div>
<button onclick="getValues()">Get Results</button>
我尝试使用 input = input.replace( '^', 'Math.pow(,)');
但是我不知道如何获取'^'之前和之后的值到括号中。
例子:(1+2)^3^3 应该是 7,625,597,484,987
最佳答案
使用带捕获组的正则表达式:
input = '3 + 2 ^3';
input = input.replace(/(\d+)\s*\^\s*(\d+)/g, 'Math.pow($1, $2)');
console.log(input);
这仅在参数只是数字时有效。它不适用于子表达式或当你重复它时,比如
(1+2)^3^3
这将需要编写一个递归下降解析器,这比我愿意在这里回答的工作要多得多。获取有关编译器设计的教科书以了解如何执行此操作。
关于javascript - 如何将输入 2^3 获取到 Math.pow(2, 3)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42148760/