У меня есть математическое выражение, которое выполняет экспоненты (например, 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);
В любое время я вхожу в выводе СИЛ дает 4^2 вместо 16, и поэтому я всегда получаю неправильный ответ после выполнения функции Eval действий. Пожалуйста, кто-нибудь знает, как я могу решить эту проблему.
Что такое значение 'c'? –
Ваше регулярное выражение довольно простое: оно не выполняется в ряде случаев: не целое число (2.3^2), числа с exp (2e-3^0.5), отрицательные числа (2^-2, 4 + -5^2) –