Ersetzen mit Array
Max
- javascript
0 derletztekick0 Max0 Struppi1 derletztekick
0 Mathias Brodala0 Max
Hallo!
Ich möchte zwei Arrays erstellen und dies dann miteinander ersetzen.
Beispiel:
var key = new Array("string1", "string2", "string3");
var value = new Array("ersatz1", "ersatz2", "ersatz3");
Nun sollen "string1" durch "ersatz1", "string2" durch "ersatz2" usw. ersetzt werden.
Hat jemand eine Idee, wie man das lösen könnte. Hatte schon einen Ansatz mittels for-Schleife, hat aber a) nicht richtig funktioniert und b) suche ich nach einer einfacheren Lösung.
In PHP ist dies bspw. sehr simpel.
Danke!
Max
Hallo Max,
Was ging daran nicht:
var key = new Array("string1", "string2", "string3");
var value = new Array("ersatz1", "ersatz2", "ersatz3");
for(var i=0; i<key.length; i++)
key[i] = value[i];
alert(key.join(", "));
In PHP ist dies bspw. sehr simpel.
In JavaScript ist es ganz sicher nichts anderes!
Übrigens: value ist bereits ein Attribut Du solltest Dein Array lieber anders nennen.
Mit freundlichem Gruß
Micha
Hallo Max,
Was ging daran nicht:
var key = new Array("string1", "string2", "string3");
var value = new Array("ersatz1", "ersatz2", "ersatz3");
for(var i=0; i<key.length; i++)
key[i] = value[i];
alert(key.join(", "));
Hallo!
Sorry, merke gerade, dass ich mich wohl falsch ausgedrückt habe. Das Problem ist, dass "string1" usw. in einem Text vorkommen und in diesem durch "ersatz1" usw. ersetzt werden sollen.
Sorry, merke gerade, dass ich mich wohl falsch ausgedrückt habe. Das Problem ist, dass "string1" usw. in einem Text vorkommen und in diesem durch "ersatz1" usw. ersetzt werden sollen.
Dann zeig doch mal wie du das ganz einfach mit PHP machst
Struppi.
Hallo Max,
Das Problem ist, dass "string1" usw. in einem Text vorkommen und in diesem durch "ersatz1" usw. ersetzt werden sollen.
*lol* Okay, dann einfach so:
var from = ['string1', 'string2', 'string3'];
var to = ['ersatz1', 'ersatz2', 'ersatz3'];
var str = 'string1 string3 string2, string3string2';
for (var i=0; i<from.length; i++){
myRegExp = new RegExp(from[i],"g");
str = str.replace(myRegExp, to[i]);
}
alert(str);
Mit freundlichem Gruß
Micha
Hallo derletztekick.
Was ging daran nicht:
var key = new Array("string1", "string2", "string3");
var value = new Array("ersatz1", "ersatz2", "ersatz3");
for(var i=0; i<key.length; i++)
key[i] = value[i];
alert(key.join(", "));
Oder so:
~~~javascript
var from = ['string1', 'string2', 'string3'];
var to = ['ersatz1', 'ersatz2', 'ersatz3'];
if (from.length == to.length) { // Sonst könnte es zu Problemen kommen
for(var i = 0; i < to.length; ++i) {
from[i] = to[i];
}
alert(from.join(', '));
}
Könnte es aber nicht sein, dass Max eigentlich innerhalb einer Zeichenkette die Werte des einen durch die Werte des anderen Arrays ersetzen möchte? Denn obiges ergibt für mich keinen Sinn.
Einen schönen Mittwoch noch.
Gruß, Mathias
Hallo!
for(var i=0; i<key.length; i++) {
text = text.replace(key[i], replaceStrings[i]);
}
damit funktioniert es, allerdings nur EINMALIG. Wenn "string1" mehrmals im Text vorkommt, wird nur das erste Vorkommen ersetzt. Was kann ich da machen?
Vielen Dank!
Hallo Max.
for(var i=0; i<key.length; i++) {
text = text.replace(key[i], replaceStrings[i]);
}damit funktioniert es, allerdings nur EINMALIG. Wenn "string1" mehrmals im Text vorkommt, wird nur das erste Vorkommen ersetzt. Was kann ich da machen?
So zum Beispiel:
function js_str_replace(mix1, mix2, str) {
// Wenn die ersten beiden Argumente Arrays sind …
if (typeof(mix1) == 'object' && mix1.length &&
typeof(mix2) == 'object' && mix2.length) {
// … und beide gleich viele Elemente enthalten …
if (mix1.length == mix2.length) {
for (var i = 0; i < mix1.length; ++i) {
// … sämtliche Vorkommen global ersetzen …
str = str.replace(new RegExp(mix1[i], 'g'), mix2[i]);
}
// … und Resultat zurückgeben.
return str;
} else {
// Mit einer ungleichen Anzahl kann nicht gearbeitet werden.
return false;
}
}
// Ansonsten global ersetzen
return (str = str.replace(new RegExp(mix1, 'g'), mix2));
}
var from = ['string1', 'string2', 'string3'];
var to = ['ersatz1', 'ersatz2', 'ersatz3'];
alert(js_str_replace(from, to, 'string1 string3 string2, string3string2')); // ersatz1 ersatz3 ersatz2, ersatz3ersatz2
Einen schönen Mittwoch noch.
Gruß, Mathias
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