kostenloser Webspace werbefrei: lima-city


Javascript komisches Verhalten bei match all (/g)

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hi,

    ich versuche mit Regex und der JS Funktion .match() an alle Werte innerhalb geschweifter Klammern {wert} zu gelangen.

    Kommt diese Struktur nur 1mal vor bzw suche ich sie nur einmal (kein globaler Match) bekomme ich dieses (erwünschte!) Ergebniss:

    str = "{wert}";
    m = str.match(/\{([^\{\}]*)\}/);
    //returns: ['{wert}', 'wert', '{wert}', 'wert'];


    Ich erhalte also einmal das ganze Muster (0) {([^\{\}]*)\} und einmal nur das, auf das mein Match in den Klammern (1) ([^\{\}]*).
    Und dann auch noch jeden Wert doppelt?!

    Wenn mein Muster nun öfter vorkommt (und ich einen globalen Mtch ausführe /g)

    str = "{wert}xxxxx{wert2}";
    m = str.match(/\{([^\{\}]*)\}/g);
    //returns: ['{wert}', '{wert2}'];


    erhalte ich nurnoch die Werte auf die der ganze Match passt, aber nichtmehr seperiert den Inhalt der Klammern.

    Erwünscht wäre dies:
    [['{wert}', ‘wert‘], ['{wert2}', ‘wert2‘]]


    Kennt sich jemand damit aus oder weiss wie ich auf mein Ergebniss komme?
    Bei diesem simplen Beispiel wäre ds noch kein Problem, da sich die Klammern einfach entfernen lassen, aber bei komplexeren Strukturen ist das so nicht wirklich angenehm.

    Vielen Dank und Grüße



    ****
    P.S. dass var str, m; fehlt ist nicht der Grund, das sind lediglich ungetestete Beispielsnippets um den Aufbau zu verdeutlichen!

    Beitrag zuletzt geändert: 9.8.2013 10:20:00 von programtools
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich bin mir nicht sicher, ob ich Dein Problem richtig verstanden habe, denke aber, dass alles zwischen der ersten öffnenden und der letzten schließenden Klammer gematcht wird. Sollte dies der Fall sein, musst Du
    ungreedy
    matchen, um das gewünschte Ergebnis zu erreichen.

    Schau mal hier auf der Seite vorbei, vielleicht hilft Dir das:
    http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
  4. Autor dieses Themas

    programtools

    programtools hat kostenlosen Webspace.

    Hi,

    danke für die Antwort, aber daran kann es ja eigentlich nicht liegen, da ich ja explizit sage, dass in meinem Text zwischen den geschweiften Klammern keine geschweiften Klammern stehen dürfen.

  5. Das habe ich übersehen, tut mir leid.
    Allerdings ist mir dafür jetzt aufgefallen, dass Du die geschweiften Klammern nicht escapen darfst.

    Hier kannst Du es testen:
    http://regexpal.com/

    EDIT: Nach weiteren Tests ist das offenbar auch nicht das Problem, ich forsche mal weiter :)

    Hier ist jetzt eine Lösung
    http://jsfiddle.net/Uv2hd/

    Beitrag zuletzt geändert: 9.8.2013 15:13:23 von tobiworlds
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!