我有一个计算指数的数学表达式(例如 2 的 2 次方),我通常将其传递给 JavaScript eval 函数。我的字符串表达式的一个示例是 2^2^2。现在,JavaScript 没有指数运算符,因此在当前示例中,您在操作数之间看到的运算符是 JavaScript 中的按位运算符。
我尝试做的是将与模式 d1 ^ d2 匹配的字符串替换为从 Math.pow (d1, d2) 返回的值。现在,它在第一次出现时成功执行此操作,但在其他出现时则不会执行此操作。下面是我的代码:
var str = '2^2^2';
var regex = /(\d+)\^(\d+)/g;
str = str.replace(c, function(match, $1, $2) {
console.log(match + '---' + $1 + '---' + $2);
return Math.pow($1,$2);
});
console.log(str);
eval(str);
每当我记录 str 的输出时,它都会给出 4^2 而不是 16,因此在 eval 函数操作之后我总是得到错误的答案。请问有人知道我该如何解决这个问题吗?
最佳答案
您可以使用递归函数,该函数在没有其他标记匹配时停止。例如:
var str = '2^2^2';
var regex = /(\d+)\^(\d+)/g;
function recursive(str) {
var matched = false;
str = str.replace(regex, function(match, $1, $2) {
if (match) {
matched = true;
}
return Math.pow($1, $2);
});
if (matched) {
str = recursive(str);
}
return str;
}
var result = recursive(str);
console.log(result);
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
关于javascript - 如何在字符串中递归替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641900/