2017-02-01 2 views
0

Его моей строкой прекрасного конца кронштейномRegex математике с

{10 
    {-55 
      {{55x}{55}*55} 
      {2}{5} 
     }{10} 
    } 
    {55} 

Мне нужно изменить {a}{b} в (a/b) .Но они содержат Что больше не из } brackets.I требуют совпадений уважали кронштейн

, как показано ниже:

(10 
    ((-55(55x/55)*55)) 
      /(2/5) 
     /10) 
     /55) 

Отрывок

var a = '{10{-55{{55x}{55}*55}{2}{5} }{10}}{55}'; 
 

 
console.log(a.replace(/{(.*)}{(.*)}(?!.*\1)/g, "($1/$2)"))

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

+2

Уверен, что смогу вам помочь: не используйте регулярное выражение, если вам нужен контекстно-зависимый парсер. – Aaron

+0

Я должен согласиться с @Aaron, регулярные выражения, как правило, плохая идея для преобразования рекурсивных структур. –

+0

@thanks Что такое контекстно-зависимый парсер? – prasanth

ответ

4

Вы можете попробовать что-то вроде этого:

  • Заменить все }{ на /
  • Затем Заменить все { от ( и } по )

var a = '{10{-55{{55x}{55}*55}{2}{5} }{10}}{55}'; 
 
var b = a.replace(/}{/g, "/"); 
 
b = b.replace(/{/g, "("); 
 
b = b.replace(/}/g, ")"); 
 
console.log(b)


РИСКОВАННАЯ

Как указывает @Darren Sweeney, выход не точно такой же результат, но в моем понимании его опечатка. Если вы внимательно заметили, {10{-55 следует разобрать до (10(-55, а не (10((55. Также эта дополнительная открывающая скоба ( делает уравнение несбалансированным.

Input: '{10{-55{{55x}{55}*55}{2}{5} }{10}}{55}' 
Output: (10((55-(55x/55)*55))/(2/5)/10)/55) 
//  ^
Смежные вопросы