Javascript komisches Verhalten bei match all (/g)
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
aufbau
aufgefallen
code
entfernen
ergebnis
explizit sage
geschweiften klammern
globaler match
http
jemand
klammern
komplexeren strukturen
match
muster
problem
struktur
testen
url
weiteren tests
wert wert wert wert code
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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
matchen, um das gewünschte Ergebnis zu erreichen.ungreedy
Schau mal hier auf der Seite vorbei, vielleicht hilft Dir das:
http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ -
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.
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage