javascript - 如何将输入 2^3 获取到 Math.pow(2, 3)?

标签 javascript math expression-evaluation

我有这个简单的计算器脚本,但它不允许电源 ^。

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/

相关文章:

c++ - (C++,Qt,Linux) 将游戏 map 坐标转换为图像坐标

c - 何时以及如何在 sizeof 表达式中评估 VLA?

javascript - 按空格拆分字符串但不在括号内

javascript - 如何优化采用数组并集的函数类型?

javascript - 通过 Javascript 将 cookie 设置为 HttpOnly

c - a 和 b 之间所有数字的和

javascript - 整数转字符串,如何修复以下错误: "TypeError: Can' t convert undefined to object"?

objective-c - 将数学方程式的 NSString 转换为一个值

ANTLR : expression evaluator, split 和战俘

javascript - 使用 Fullpage.js 事件幻灯片上的滚动条可溢出内容