2015-11-03 2 views
1

Моя строка является продолжением:Javascript: найти регулярное выражение с захватом заменить^Ь на Math.pow (а, б)

str = "(2+2)^(4*(5+6^(5^6))))"; 

Как вы можете видеть, власть может быть вложен в другой власти с или без круглых скобок.

Итак, я хочу преобразовать эту строку, используя regexp, чтобы заменить^на Math.pow (a, b) javascript.

Идея? Большое вам спасибо, сердечно.

+0

Как насчет того, чтобы поместить его в текстовый редактор и использовать find/replace? – pedromss

+0

И тогда вы можете использовать 'ev [ai] l' на нем – Tushar

+0

Tushar: ev [ai] l: что говорят? – totoaussi

ответ

2

Я думаю, что с помощью регулярных выражений для разбора выражений не получится хорошо для вас ...

Почему бы не использовать библиотеку математике выражение парсер как http://mathjs.org/

+0

Да, это хорошая идея. Но почему использование выражения регулярного выражения для разбора выражений не получится для меня? – totoaussi

+1

Это не простая находка и замена. Чтобы выполнить синтаксический анализ достоверно, вам нужно будет сделать несколько проходов и иметь код, контекст которого знает об ассоциации и приоритете. Кто-то еще сделал для вас тяжелую работу. Использовать библиотеку: P – markt

+0

Да, вы правы, управление приоритетом и ассоциация в формуле очень сложны. Моя цель - создать калькулятор в javascript. Надеюсь, матчи подходят. Большое спасибо. – totoaussi

1

Эти шаги ваш алгоритм будет иметь для выполнять:

  1. Найти "корень ^" полукокса
  2. Захват группы до и после ^
  3. Повторных

Проблема здесь состоит в том, что этот типе структуры данных как рекурсивный и не регулярный ...

  • Это рекурсивное, так как вы можете иметь бесконечное количество вложенной скобки, и каждый из них должен должны оцениваться отдельно
  • Это не регулярный, так как, например, вы можете иметь группы, которые не имеют круглые скобки: (2+2)^2

... что делает поиск указанного «корня ^» проблематичным

Кроме того, вход не всегда может быть действительным (например, пользователь забывает закрыть скобку).