replace() - ein Suchkriterium, verschiedener Ersetzungswert
John
- javascript
Hallo,
ich wollte mal fragen, wie ich folgendes hinbekomme:
ich habe einen Text - eine Liste vielmehr - und ich habe ein Array mit genausoviel Werten, wie die Liste Einträge hat.
Nun möchte ich die Einträge der Liste mit replace() und einem regulären Ausdruck herausfiltern und je nach Treffer Nummer mit dem Wert an entsprechender Stelle im Array ersetzen.
Hier mal ein Schema:
var a = ['0', '1', '2', '3']
for (var i = 0, l = a.length; i < l; i++)
{
textDiv.innerHTML.replace(/[0-9]{5}/g, a[i]);
}
Mit match() und dem Ausdruck bekomme ich alle Einträge mit alert() angezeigt. Wie kann ich nun jedem Treffer einen anderen Wert verpassen?
Grüße, John
Hi,
Mit match() und dem Ausdruck bekomme ich alle Einträge mit alert() angezeigt. Wie kann ich nun jedem Treffer einen anderen Wert verpassen?
Indem du die Treffer an eine Callback-Funktion übergibst, und diese den passenden Ersatzwert heraussuchen und zurückgeben lässt.
Weitere Erklärungen und ein Beispiel findest du hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter
MfG ChrisB
Hallo,
Indem du die Treffer an eine Callback-Funktion übergibst, und diese den passenden Ersatzwert heraussuchen und zurückgeben lässt.
Also, so ganz verstehe ich das nicht.
var a = ['0', '1', '2', '3'];
for (var i = 0, l = a.length; i < l; i++)
{
textDiv.innerHTML.replace(/[0-9]{5}/g, function(){return x[i];});
}
Das funktioniert nicht. Sieht jemand den Fehler?
Grüße, John
Hi,
var a = ['0', '1', '2', '3'];
for (var i = 0, l = a.length; i < l; i++)
{
textDiv.innerHTML.replace(/[0-9]{5}/g, function(){return x[i];});
}
> Das funktioniert nicht. Sieht jemand den Fehler?
Sieht jemand, wo x herkommen soll?
MfG ChrisB
--
Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
Hallo,
var a = ['0', '1', '2', '3'];
for (var i = 0, l = a.length; i < l; i++)
{
textDiv.innerHTML.replace(/[0-9]{5}/g, function(){return x[i];});
}
> > Das funktioniert nicht. Sieht jemand den Fehler?
> Sieht jemand, wo x herkommen soll?
Verdammt.. Kleiner Tippfehler hier.
Habe ein wenig umgeschrieben - es will aber immer noch nicht klappen:
~~~javascript
var a = ['0', '1', '2', '3'];
var m = textDiv.innerHTML.match(/[0-9]{5}/g);
for (var i = 0, l = m.length; i < l; i++)
textDiv.innerHTML.replace(m[i], function(){return a[i];});
Ich bekomme die korrekte Anzahl der zu treffenden Einträgen mit m.length
Ich bekomme den korrekten momentanen Wert m[i] in der Funktion mit alert(m[i])
Ich bekomme den korrekten momentanen Wert von a[i] in der Funtion mit alert(a[i])
Aber: es wird nichts ersetzt. Irgendwas läuft da nicht rund - aber was?
Grüße, John
Hi,
Aber: es wird nichts ersetzt.
Doch.
Aber: Du machst nichts mit dem „Ersetzten“.
String.replace ändert nicht das Original, sondern gibt das „Ersezte“ zurück.
MfG ChrisB
Hallo,
Aber: Du machst nichts mit dem „Ersetzten“.
String.replace ändert nicht das Original, sondern gibt das „Ersezte“ zurück.
Ai verdammt... Das habe ich also übersehen.
Tja.. jetzt muss ich mir was neues überlegen.
Aber vielen Dank für die Info. Habe mich gestern das erste Mal etwas intensiver mit regulären Ausdrücken beschäftigt. Dann wollte ich einen Text damit "zerlegen" und umformen. Da habe ich gleich an replace() gedacht.
Grüße, John
Hi,
Aber: Du machst nichts mit dem „Ersetzten“.
String.replace ändert nicht das Original, sondern gibt das „Ersezte“ zurück.
Ai verdammt... Das habe ich also übersehen.
Tja.. jetzt muss ich mir was neues überlegen.
Nein, musst du nicht. Du musst nur das Original entsprechend überschreiben – mit dem Rückgabewert, den du von replace bekommst.
MfG ChrisB
Hallo,
Du musst nur das Original entsprechend überschreiben – mit dem Rückgabewert, den du von replace bekommst.
Joo, habe ein wenig über das Problem nachgedacht und bin genau zu dieser Lösung gekommen. Einfach bei jedem Schleifendurchgang die Speichervariable überschreiben.
Bin nun fertig mit meinem Script :-)
Nochmal ein dickes Dankeschön für deine Tipps.
Grüße, John
moin,
ich habe einen Text - eine Liste vielmehr - und ich habe ein Array mit genausoviel Werten, wie die Liste Einträge hat.
Mach doch gleich ein Objekt obj[key] = value;
Nun möchte ich die Einträge der Liste mit replace() und einem regulären Ausdruck herausfiltern [..]
Mit einer callback-Funktion, Beispiel hier, für die Vorschau werden die Attribute title und descr in das Template gesetzt.
Schönen Sonntag!
Hallo,
Mach doch gleich ein Objekt
obj[key] = value;
Nun, es ist ein Text, der strukturiert ist wie eine Liste... Dieser Text ist sehr, sehr lang (nicht von mir geschrieben) und da bedarf es ein paar kleine Änderungen.
Grüße, John