Javascript: найти регулярное выражение с захватом, чтобы заменить a^b на Math.pow(a, b)
Моя строка следующая:
str = "(2+2)^(4*(5+6^(5^6))))";
Как видите, сила может быть вложена в другую власть с круглыми скобками или без них.
Поэтому я хочу преобразовать эту строку с помощью регулярного выражения для замены ^ на Math.pow(a,b) из javascript.
Идея? Большое спасибо заранее, сердечно.
2 ответа
Я думаю, что использование регулярных выражений для разбора выражений не принесет вам пользы...
Почему бы не использовать библиотеку синтаксических анализаторов математических выражений, например http://mathjs.org/
Вот шаги, которые должен выполнить ваш алгоритм:
- Найти "корень"
^
"символ - Захват групп до и после
^
- Повторение
Проблема здесь в том, что этот тип структуры данных является рекурсивным и нерегулярным...
- Это рекурсивно, так как вы можете иметь бесконечное количество вложенных скобок, и каждый должен быть оценен отдельно
- Это не регулярно, так как, например, у вас могут быть группы без круглых скобок:
(2+2)^2
... что делает поиск указанного "корня ^
"проблематично
Кроме того, входные данные не всегда могут быть действительными (например, пользователь забывает закрыть круглые скобки).