Zugriff auf Treffer eines regulären Ausdrucks in replace()
Johannes Röckert
- javascript
Hallo!
Führt man in Perl eine Suche-Und-Ersetze-Operation aus, kann man ja wie bekanntlich über die globalen Variablen $[0-9]+ auf die Suchtreffer des regulären Ausdrucks zugreifen, um den String, gegen den der Treffer ersetzt wird, dynamisch dem Suchtreffer entsprechend zu generieren.
Beispiel:
$str =~ s/([0-9+)/<b>$1</b>/g; # Was z.B. alle Zahlen fett formatiert ;-)
Aber wie lässt sich selbiges in JavaScript bewerkstelligen?
Die Funktion, die eine RegExp-Ersetzung durchführt ist eine Methode der string-Klasse und wird in selfhtml auf http://selfhtml.teamone.de/javascript/objekte/string.htm#replace , die RegExpr-Klasse auf http://selfhtml.teamone.de/javascript/objekte/regexp.htm dokumentiert.
Aus der Doku ließe sich ableiten, dass folgendes Script funktioniert:
alert("100 Jahre".replace(/([0-9]+)/g, "<b>"+(RegExp.$1)+"</b>"));
Tut es aber nicht, da RegExp.$1 "undefined" ist. Vielleicht wird RegExp.$[0-9] nur gesettet, wenn man /.../.exec() aufruft? Doch ich will ja replacen und nicht matchen.
Würde mich freuen, wenn mir da wer helfen könnte :)
Bin doch noch selber auf die Antwort gestoßen. :-)
http://www.devguru.com/Technologies/ecmascript/quickref/regexp_$1-$9.html
Demnach wäre korrekt:
alert("100 Jahre".replace(/([0-9]+)/g, "<b>$1</b>"));
Und siehe da, es funktioniert :)
Vielleicht sollte man das auch in selfhtml erwähnen, da man sehr oft auf die Suchtreffer zugreifen muss.