Platzhalter in einer URL ersetzen
palkom
- javascript
hi zusammen,
ich würde gerne platzhalter in einer URL auf einen schlag ersetzen.
beispiel url:
/wwww/_PLATZHALTER1_/_PLATZHALTER2_/_PLATZHALTER3_/_PLATZHALTER4_/
ich gehe bisher so vor:
url.replace(/_PLATZHALTER1_/, text1)
url.replace(/_PLATZHALTER2_/, text2)
url.replace(/_PLATZHALTER3_/, text3)
url.replace(/_PLATZHALTER4_/, text4)
ich würde das ganze aber gern mit einem aufruf erledigen. ist das möglich?
danke für eure hilfe.
gruß
Lieber palkom,
url.replace(/PLATZHALTER1/, text1)
url.replace(/PLATZHALTER2/, text2)
url.replace(/PLATZHALTER3/, text3)
url.replace(/PLATZHALTER4/, text4)
ich sehe im Moment nur diese Möglichkeit:
~~~javascript
for (i = 1; i < 5; i++) {
eval ("url.replace(new Regexp('_PLATZHALTER" + i + "_', 'g'), text" + i + ");");
}
Ja, mir ist klar, dass eval evil ist... aber ich hätte auch keine zig Variablen definiert, sondern zumindest ein Array.
Liebe Grüße,
Felix Riesterer.
Hallo,
ich hätte auch keine zig Variablen definiert, sondern zumindest ein Array.
Dann raten wir dem Fragesteller doch lieber diese Lösung:
var url = "/wwww/_PLATZHALTER1_/_PLATZHALTER2_/_PLATZHALTER3_/_PLATZHALTER4_/";
var texte = [
undefined, // Position 0 bleibt leer
"text1",
"text2",
"text3",
"text4"
];
var platzhaltername = "PLATZHALTER";
var regexp = new RegExp("_" + platzhaltername + "(\\d+)_", "g");
function ersetzungsfunktion (treffer, nummer) {
return texte[nummer];
}
var url = url.replace(regexp, ersetzungsfunktion);
alert(url);
Mathias
n'abend,
var platzhaltername = "PLATZHALTER";
var regexp = new RegExp("" + platzhaltername + "(\d+)", "g");
function ersetzungsfunktion (treffer, nummer) {
return texte[nummer];
}
var url = url.replace(regexp, ersetzungsfunktion);
Wo du gerade [String.replace](http://de.selfhtml.org/javascript/objekte/string.htm) mit Callback-Funktion empfiehlst, fällt mir mal wieder auf, dass die Javascript-Dokumentation eben dieses nicht behandelt. Ohne es zu wissen, würde ich beispielsweise nicht auf die Idee kommen, dass alle "Capure-Blocks" als Argument übergeben werden:
~~~javascript
var text = 'sss123ttt&%$',
pattern = new RegExp( '(\\w+)((\\d{3})([a-z]+))(\\W+)' ),
replaceCallback = function( match, buchstaben, dreiZahlenUndKleinbuchstaben, dreiZahlen, kleinBuchstaben, sonderzeichen ){
// kompletter gefundener expression-match
alert( match );
// erster Capture-Block: (\\w+)
alert( buchstaben );
// zweiter Capture-Block: ((\\d{3})([a-z]+)) -- von außen nach innen
alert( dreiZahlenUndKleinbuchstaben );
// dritter Capture-Block: (\\d+)
alert( dreiZahlen);
// vierter Capture-Block: ([a-z]+)
alert( kleinBuchstaben );
// fünfter Capture-Block: (\\W+)
alert( sonderzeichen );
// ersetzen durch Rückgabewert
return 'ersetzt...';
};
text.replace( pattern, replaceCallback );
Und für die überkandidelten der Hinweis, dass dieser Spaß im IE5 wohl nicht funktioniert...
weiterhin schönen abend...