Gunnar Bittersmann: Variablen in RegExps

Beitrag lesen

Falls meine Vermutung richtig sein sollte:

Der reguläre Ausdruck ist nicht fest, sondern soll also zur Laufzeit dynamisch erzeugt werden. Der Hinweis auf http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#eval@title=eval() kam schon in diesem Thread.

Ausgehend von

s = "?typ1=0&typ2=0";  
if (/(.*)typ1=(\d+)(.*)/.exec(s))  
  s = RegExp.$1 + "typ1=" + (parseInt(RegExp.$2) + 1).toString() + RegExp.$3;

wird /(.*)typ1=(\d+)(.*)/ ersetzt durch eval("/(.*)typ1=(\d+)(.*)/"):

s = "?typ1=0&typ2=0";  
if (eval("/(.*)typ1=(\d+)(.*)/").exec(s))  
  s = RegExp.$1 + "typ1=" + (parseInt(RegExp.$2) + 1).toString() + RegExp.$3;

Das funktioniert nicht aber nicht mehr. Das "" muss maskiert werden, damit es erhalten bleibt:

s = "?typ1=0&typ2=0";  
if (eval("/(.*)typ1=(\\d+)(.*)/").exec(s))  
  s = RegExp.$1 + "typ1=" + (parseInt(RegExp.$2) + 1).toString() + RegExp.$3;

Das tut immer noch das Gleiche.

Nun kannst du das Argument von eval() manipulieren, den String also auseinanderreißen und die Variable type ins Spiel bringen:

s = "?typ1=0&typ2=0";  
type = "typ1";  
if (eval("/(.*)"+ type + "=(\\d+)(.*)/").exec(s))  
  s = RegExp.$1 + "typ1=" + (parseInt(RegExp.$2) + 1).toString() + RegExp.$3;

Die Anpassung der Zuweisung s = … sollte dir allein gelingen.

Live long and prosper,
Gunnar

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