Я сейчас пытаюсь построить формулы в HTML5 <canvas>
, позволяя пользователю вставить формулу. Это прекрасно работает через eval()
; однако ^
означает побитовый XOR в Javascript, тогда как в формуле он должен означать «в степень».
Так что в основном мне придется переписать что-то вроде x^4
в Math.pow(x, 4)
. Я придумал, используя регулярные выражения. Этот, однако, работает только в определенной степени:
"x^4".replace(/(.*)\^(.*)/g, "Math.pow($1, $2)")
Переписывает x^4
в Math.pow(x, 4)
, но для более сложных формул это не так. Например, 2 + x^4
переписывается как Math.pow(2 + x, 4)
, тогда как, конечно, оно должно быть 2 + Math.pow(x, 4)
. Кроме того, если показатель степени имеет скобки вокруг него, например, 2^(x+1) + 3
, его следует переписать в Math.pow(2, x+1) + 3
вместо Math.pow(2, x+1 + 3)
, конечно.
Как мне переписать это так, чтобы в функцию pow помещались только правильные части? Я действительно не вижу, с чего начать, поэтому любые советы будут с благодарностью.