CJay: stringToArray()

Hi,
Hat jemand eine Methode in Javascript die einen String wie zum Beispiel
'Ich[ bekomme es nicht] hin' oder 'Ich(bekomme es nicht) hin'
in ein solches Array
['Ich', [ 'bekomme es nicht' ] , 'hin']
verwandelt ....
Ich selber kenne mich schon eine Menge
mit Javascript aus aber ich habe es nicht hinbekommen.
Vielleicht schafft es ja einer.
Bin schon seit 3 Stunden am probieren :/.
Danke,
Chris. :D

  1. Meine Herren,

    Hat jemand eine Methode in Javascript die einen String wie zum Beispiel
    'Ich[ bekomme es nicht] hin' oder 'Ich(bekomme es nicht) hin'
    in ein solches Array
    ['Ich', [ 'bekomme es nicht' ] , 'hin']
    verwandelt ....

    Bitte nenn mal ein paar Sonderfälle mehr, wie soll die Ausgabe aussehen, falls es mehrere Umklammerungen gibt, sequenziell oder verschachtelt, wie soll die Ausgabe aussehen, wenn nicht zu jeder öffnenden auch eine schließende Klammer existiert usw.

    Für den einen Fall dort oben hilft dir dieser regülare Ausdruck hoffentlich weiter:

    alles was keine öffnende Klammer ist : ([^(]*)
    dann genau eine öffnende Klammer: (
    dann alles was keine schließende Klammer ist: ([^)]*)
    dann genau eine schließende Klammer: )
    dann der Rest: (.*)

    Ergibt zusammen /([^(]*)(([^)]*))(.*)/

    Damit bist du noch nicht am Ziel, aber es sollte dir eine Hilfe sein:

    /([^\(]*)\(([^\)]*)\)(.*)/.exec('Ich(bekomme es nicht) hin');  
    //["Ich(bekomme es nicht) hin", "Ich", "bekomme es nicht", " hin"]
    
    1. Hei 1UnitedPower;

      Du bist ein Gott ;D.
      Ja es soll auch verschachtelt funktionieren z.B

      'Ich(bekomme (es (nicht))) hin'
      zu
      ['Ich' , ['bekomme' , ['es',['nicht']]],'hin'].

      Geht das genauso einfach??

      Das geht mit deinem code aber leider nicht.
      Mit einer habe ich es nämlich auch schon gepackt :D.

      Danke,
      Chris :D

      1. Grüße,
        mag nicht ganz elegant sein - aber splitte doch jeweils in 3 teile - vor der Klammer, Mitte, nach der Klammer - und das ganze rekursiv von außen nach innen? Also jeweils Teilstrings von erste( bis letze) und das ganze bis keine () mehr im String sind?
        MFG
        bleicher

        --
        __________________________-

        FirefoxMyth
        1. P.S: wobei so wie du es gerade zeigst, sind [] einfach nur delimeter?
          MFG
          bleicher

          --
          __________________________-

          FirefoxMyth
        2. Hi,
          Das funktioniert dann aber bei z.b
          'Das(War(Kanpp))An(Der(Lösung))' nichtmehr.

          Das Ganze soll später im mathematischen bereich eingesetzt werden.

          input = '4+(3-2)-(2+55-(4+1))'
          zu
          verarbeitung = [4,[3-[2/6],-2*,[2+55-,[4+1]]]

          Ich denke das ich so später bei vielen Mathematischen Operationen Vorteile habe

          1. Hi,
            Das funktioniert dann aber bei z.b
            'Das(War(Kanpp))An(Der(Lösung))' nichtmehr.

            Das Ganze soll später im mathematischen bereich eingesetzt werden.

            Sag das doch gleich. Dann willst du dir höchstwahrscheinlich auch gleich einen Parser bauen.

      2. Meine Herren,

        Geht das genauso einfach??

        Nein da stoßen reguläre Ausdrücke an ihre Grenzen. Man müsste ja die öffnenden und geschweiften Klammern zählen können, als Faustregel kann man sich merken, dass reguläre Ausdrücke nicht auf Probleme angewandt werden können, für deren Lösung Zählungen notwendig sind. Das Pumping-Lemma drückt das ganze formal aus.

        Du willst also einen Parser für mathematische Terme schreiben? Das ist ein sehr ambitioniertes Projekt...

        1. Meine Herren,

          Geht das genauso einfach??

          Nein da stoßen reguläre Ausdrücke an ihre Grenzen.

          Das stimmt so nicht. Man kann in Regexes auch Rekursion nutzen - auch wenn es dann strenggenommen keine "regulären" Ausdrücke mehr sind.