2017-02-01 37 views
0

它我的字符串正則表達式數學與完美的句號支架的

{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) 
//  ^