Gunnar Bittersmann: Variablen in RegExps

Beitrag lesen

werbeklaus,
Meine Reaktion nach dem ersten Lesen deines Postings: He?
Meine Reaktion nach dem zweiten Lesen deines Postings: He?? …
Würdest du deim Problem bitte so schildern, dass man es versteht?

Ich sag ja auch nicht

s = "?typ1=0&typ2=0";  
if (m = s.match(/typ1=(\d+)/))  
  s = s.replace(/typ1=\d+/, "typ1=".concat((parseInt(m[1]) + 1).toString()));

und du verstehst nichts.

Mit regulären Ausdrücken kannst du (AFAIK) keine numerischen Berechnungen ausführen. Du musst dir also erstmal den Wert hinter "typ1=" als Zahl besorgen. Du suchst also "typ1=" gefolgt von Ziffern, welche du dir merken willst: /typ1=(\d+)/

Da du die Zeichenfolge, die dem Suchmuster entspricht heben willst, ist die Methode http://de.selfhtml.org/javascript/objekte/string.htm#match@title=match() einzusetzen; das Ergebnis speicherst du in m.

Hat die Suche Erfolg, ist m ein Array: in m[0] steht die ganze passende Zeichenfolge ("typ1=0"); in m[1] steht der erste (hier einzige) geklammerte Unterausdruck: die Zahl ("0").

Hat die Suche keinen Erfolg, ist m kein Array, es gibt also weder m[0] noch m[1]. Damit das Script keinen Laufzeitfehler erzeugt (fallst "typ1=" nicht vorkommt oder keine Zahl dahinter steht), solltest du das mit einer if-Abfrage abfangen und nur bei erfolgreicher Suche auf m[1] (die Zahl) zugreifen.

Nun willst du ersetzen; dazu dient die Methode http://de.selfhtml.org/javascript/objekte/string.htm#replace@title=replace(). Damit die richtige Zahl ersetzt wird, wieder nach "typ1=" gefolgt von Ziffern suchen (die du dir jetzt nicht merken musst): /typ1=\d+/

Ersetzt wird duch "typ1=" gefolgt von der um 1 erhöhten Zahl, die immer noch als String(!) in m[1] steht. Dazu wird sie in eine Ganzzahl umgewandelt (http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt()), erhöht und wieder in einen String umgewandelt (http://de.selfhtml.org/javascript/objekte/number.htm#to_string@title=toString()), der an "typ1=" angehängt wird (http://de.selfhtml.org/javascript/objekte/string.htm#concat@title=concat()).

Live long and prosper,
Gunnar

--
„Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)