Olaf: Problem mit Funktion innerhalb Replace Funktion?

Hallo zusammen,

ich brüte seit geraumer Zeit über dem Rexexp Objekt und der Repalce Funktion

Konkret bekomme ich einen String mstr über den Zaun gekippt, der den HTML Code eines Input Feldes samt Inhalt enthält.

Jetzt suche ich mit regulären Ausdrücken nach unerwünschten Mustern, in dem Beispiel hier nach "<?..?>", was als Unterausdruck geklammert ist und sich mit $2 ansprechen lässt.

So weit, so gut. Jetzt wollte ich aber dieses $2 an eine andere Funktion übergeben, weiterverarbeiten und erst den Rückgabewert im Replace verwenden.

  
mstr = mstr.replace(/(\<input.*?)(\<\?.*?\?\>)(.*?\>)/ig,"$1" + dummyret($2) + "$3");  
  
function dummyret(str) {  
	//...verarbeitung  
	alert(str);  
	return str;  
}  

Schreibe ich dummyret($2), dann bekomme ich eine Meldung $2 ist undefiniert,
Schreibe ich dummyret("$2"), dann gibt alert(str) in der Funktion dummyret "$2" aus.

Wie komme ich denn in dumyret(str) an den Inhalt von $2? Geht das überhaupt?

Vielen Dank & Grüsse

Olaf

  1. mstr = mstr.replace(/(<input.*?)(<?.*??>)(.*?>)/ig,"$1" + dummyret($2) + "$3");

    Hier wird dummyret nur einmal aufgerufen, und zwar in dem Moment, wo diese Zeile ausgeführt wird. Der Rückgabewert wird dann mit "$1" + rückgabewert + "$3" verknüpft, heraus kommt ein fester String und der wird dann als Parameter an replace() übergeben.
    Was du als Ersetzungsfunktion willst, wird überhaupt nicht mehrfach aufgerufen. Wenn du das willst, musst du replace ein Funktionsobjekt und kein String übergeben: string.replace(regexp, funktion)

    Diese Funktion bekommt die Teiltreffer als Parameter 2-x. Die kannst du dann bearbeiten und den neuen String zurückgeben:

    function dummyret (gesamterString, teiltreffer1, teiltreffer2, teiltreffer3) {
       var neuerteiltreffer2 = [mach was mit teiltreffer2];
       return teiltreffer1 + neuerteiltreffer2 + teiltreffer3;
    }

    Mathias

    1. vielen Dank, so funktioniert es. Olaf