2017-02-01 2 views
0

Its my StringRegex Mathe mit perfektem Ende des Halters

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

Ich brauche die {a}{b} in (a/b) ändern .Aber sie enthalten die mehr und nicht von } brackets.I braucht

wie unter der angesehenen Klammer Match:

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

Snippet

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

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

Ich bin nicht gut in regex kann jemand helfen mee ..

+2

Sicher kann ich Ihnen helfen: Verwenden Sie nicht Regex, wenn Sie einen kontextsensitiven Parser benötigen. – Aaron

+0

Ich muss @Aaron zustimmen, reguläre Ausdrücke sind normalerweise eine schlechte Idee, um rekursive Strukturen zu transformieren. –

+0

@thanks Was ist das kontextsensitive Parser? – prasanth

Antwort

4

Sie können so etwas wie dies versuchen:

  • alle }{ Ersetzen von /
  • Dann ersetzen Sie alle { von ( und } von )

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)


Caveat

Wie @Darren Sweeney wies darauf hin, ausgegeben nicht genau die gleiche Leistung aber in meinem Verständnis es ist ein Tippfehler. Wenn Sie genau hinsehen, sollte {10{-55 zu (10(-55 und nicht (10((55 geparst werden. Auch diese zusätzliche Öffnungsklammer ( macht die Gleichung unausgewogen.

Input: '{10{-55{{55x}{55}*55}{2}{5} }{10}}{55}' 
Output: (10((55-(55x/55)*55))/(2/5)/10)/55) 
//  ^
Verwandte Themen