Hallo nochmal.
Wenn "string1" mehrmals im Text vorkommt, wird nur das erste Vorkommen ersetzt. Was kann ich da machen?
So zum Beispiel:
So viel zur Quick-and-Dirty-Lösung. Nun eine vermeintlich bessere:
function js_str_replace(mix1, mix2, str) {
// Die ersten beiden Argumente müssen Arrays sein …
if (typeof(mix1) == 'object' && mix1.[ref:self811;javascript/objekte/array.htm#length@title=length] &&
typeof(mix2) == 'object' && mix2.length) {
// … und die Anzahl ihrer Elemente muss übereinstimmen
if (mix1.length == mix2.length) {
// Alle Elemente durchlaufen
for (var i = 0; i < mix1.length; ++i) {
// Bei jedem Element einmalig bei 0 anfangen
var offset = 0;
// Das erste Vorkommen suchen
var found = str.indexOf(mix1[i], offset);
// Solange Vorkommen gefunden
while (found != -1) {
// Teilzeichenkette davor …
var before = str.[ref:self811;javascript/objekte/string.htm#substring@title=substring](0, found);
// … und danach extrahieren
var after = str.[ref:self811;javascript/objekte/string.htm#substr@title=substr](before.length + mix1[i].length);
// Startpunkt erhöhen, sonst gibts eine nette Endlosschleife
offset = ++found;
// Nächstes Vorkommen suchen
found = str.indexOf(mix1[i], offset);
// Teilzeichenkette vorher mit Ersetzung und Teilzeichenkette nachher zusammensetzen
str = before + mix2[i] + after;
}
}
// Am Ende aller Ersetzungen zurückgeben
return str;
} else {
// Die Anzahl der Elemente muss definitiv gleich sein
return false;
}
}
// Siehe oben
var offset = 0;
var found = str.indexOf(mix1, offset);
while (found != -1) {
var before = str.substring(0, found);
var after = str.substr(before.length + mix1.length);
offset = ++found;
found = str.indexOf(mix1, offset);
str = before + mix2 + after;
}
return str;
}
var from = ['string1', 'string2', 'string3'];
var to = ['ersatz1', 'ersatz2', 'ersatz3'];
var str = 'string1 string3 string2, string3string2';
alert(js_str_replace(from, to, str)); // ersatz1 ersatz3 ersatz2, ersatz3ersatz2
alert(js_str_replace('foo', 'bar', 'Lesfoo')); // Lesbar
„Vermeintlich“, weil die while-Schleife zum Auffinden aller Vorkommen zweimal notiert werden muss, was mir jedoch gar nicht gefällt.
Einen schönen Mittwoch noch.
Gruß, Mathias
--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
„It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
[HTML Design Constraints: Logical Markup]