str_replace für JavaScript

Als Web-Entwickler ist man es ja gewohnt, beim Programmieren mit JavaScript regelmäßig über Unzulänglichkeiten in den Implementierungen der einzelnen Browser zu stolpern. Da ich mich in der letzten Zeit jedoch näher mit JavaScript beschäftigen musste, stellte ich weitere Ungereimtheiten fest, je tiefer ich mich in die Materie einarbeitete und meine Erfahrungen mit dem “JavaScript way of programming” machte.

In diesem Beitrag beschreibe ich die für mich drei größten Überraschungen. Besonders interessant dürfte für die meisten Punkt 3 sein, indem ich meine effiziente Lösung für eine str_replace wie in php für JavaScript vorstelle.

Doch der Reihe nach — aber ihr dürft natürlich auch direkt weiter scrollen ;-)

1. Semikolons am Befehlsende sind optional. Und alles was optional ist, macht in der Regel Probleme. In C, php, Java usw. fliegt einem der Compiler bei einem vergessenem Semikolon um die Ohren; man merkt, dass etwas nicht stimmt, und kann den Fehler schnell beheben. Nicht so in JavaScript, denn hier ist das Semikolon am Befehlsende optional, man kann auch einfach eine neue Zeile einfügen. Dumm nur, dass dadurch ungewünschte Effekte auftreten können. Es gibt Situationen – und das leider öfter, als man denkt! – da vergisst man ein Semikolon, und das was JavaScript dann dort reininterpretiert unterscheidet sich von dem, was man sich vorgestellt hatte. Ups! Abhilfe schaffen hier Tools wie jsLint.

2. Variablen in Funktionen und Objekten sind global. Jedenfalls solange man nicht var vor sie schreibt. Das kann übel sein, wenn man beispielsweise in zwei Funktionen die selben Variablennamen – bspw. i für eine Zählvariable – verwendet, und diese abwechselnd aufruft.

3. str_replace für JavaScript. String-Objekte in JavaScript besitzen zwar eine replace-Methode, die jedoch mit regulären Ausdrücken arbeitet und das Objekt modifiziert. Da ich jedoch nur eine simple Suchen/Ersetzen-Funktion benötige und die Einfachheit der str_replace(search, replace, subject)-Funktion aus php gewöhnt bin, wollte ich mir so etwas für JavaScript basteln, nachdem ich dies auch schon für foreach und in_array getan hatte. Zuerst wollte ich einen Wrapper für String.replace bauen, dann kam mir jedoch eine viel simplere Idee:

function str_replace(search, replace, subject) {
return subject.split(search).join(replace);
}

Der String subject wird an allen Vorkommen von search zerteilt, es entsteht ein Array mit den resultierenden Teil-Strings. Dieses Array wird dann wieder zu einem String verkettet, und zwar mit replace an allen Verknüpfungspunkten.

42 Responses to “str_replace für JavaScript”

  1. herzi says:

    Tolle Idee, großer Haken (glaub’ ich, ich bin zu faul, das auszuprobieren):

    PHP:
    str_replace("abcabbc", "b", "d"); => "adcaddc";

    JavaScript:
    "abcabbc".split("b") => ["a", "ca", "c"]
    [..].join("d") => "adcadc"

    Oder irre ich mich da jetzt? (Wenn ja, dann lösch’ diesen Klugscheißer-Kommentar bitte wieder)

  2. hendi says:

    Glücklicherweise irrst du dich, denn:
    "abcabbc".split("b") => ["a", "ca", "", "c"]
    :)

  3. dnf says:

    thanks!

  4. nv says:

    Wirklich sehr gute Idee. Herzichen Dank

  5. Demy says:

    Hab die Funktion durch google gefunden – vielen dank!

  6. burghi says:

    Manchmal sind die naheliegensten Ideen die besten :-D Thx :-D

  7. ich says:

    Habs auch durch google gefunden – besten dank.

  8. fabian says:

    Hey, super, genau DAS habe ich gesucht.
    (P.S.: Google Ranking auf Platz 1 bei "str_replace in javascript".. verdienter weise! ;-) )

    mfg
    Fabian

  9. Marc says:

    Hi,

    vielen Dank für Deine Funktion.

    Ich habe sie soweit angepasst, dass sie beim Input (wie in PHP) auch mit Arrays umgehen kann:
    http://www.phpbb-de.com/str-replace-in-javascript-t593.html

    Gruß
    Marc

  10. citostyle says:

    "String-Objekte in JavaScript besitzen zwar eine replace-Methode, die jedoch mit regulären Ausdrücken arbeitet und das Objekt modifiziert."
    Stimmt beides nicht – modifiziert weder das objekt, noch brauchst du unbedingt reguläre ausdrücke "ahabla".replace("bla", "sa") funktioniert auch und liefert "ahasa"

  11. Toni says:

    Hallo, das hat mir sehr geholfen. Bei mir funktioniert das blöde replace nämlich nicht. Der Parameter g wird einfach ignoriert.

  12. zichzach says:

    Thanks for this lightweight solution.

  13. asc says:

    Thanks! Small and beautifull…

  14. EndEffekt says:

    Funktionier leider nicht mit FireFox :-(

  15. kcore says:

    Kann EndEffekt glücklicher Weise nicht bestätigen, Geht auch im FF perfekt. Danke.

  16. vangoo says:

    super idee.

    danke

  17. Alex says:

    Danke, danke, danke!

  18. Stefan Johne says:

    Perfekt, genau das habe ich gesucht =D erspart ein ekliges for ;).

  19. tichy says:

    Vielen vielen Dank, das habe gebraucht.
    Hast du noch mehr davon?

  20. Felix says:

    Hallo – eine klasse Idee, wirklich bin sehr begeistert. Auch weil ich reguläre Ausdrücke wirklich nicht mag. Und dann hab ich festgestellt, dass String.replace() nicht zwangsläufig einen regulären Ausdruck als erstes Argumnt fordert, sondern auch normale Strings akzeptiert. Also alles für die Katz :)

    Grüße aus der Hauptstadt

  21. Max says:

    danke! Du rettest mein Leben :)

  22. Rondon_RoT says:

    kein problem sollte zwei mal gelöst werden müssen,
    thx auch meinerseits

  23. Xel says:

    ich weiß ja nicht, was da manch einer von sich gibt…
    “abcdabcd”.replace(‘d’,'[d]’) => “abc[d]abcd”
    also nu sag nochmal einer, dass das das gleiche wäre, wie
    “abcdabcd”.split(“d”).join(“[d”]) => “abc[d]abc[d]”

    Lernt erstmal das zu testen, was ihr glaubt raus gefunden zu haben.
    Ich meine es ist natürlich auch kein Problem, das in ner Schleife laufen zu lassen, aber sorum ist es definitiv eleganter.

    Danke!

  24. fwolle says:

    jaja, so hab ich damals in php meine strings auch replaced , bis mir denn mal jemand str_replace erklärt hat xD. Super tipp, danke ;-)

  25. timsta says:

    yo danke ist gut! ist der ferrari deiner? also javascripten bringt kohle oder wie?

  26. Frank-Peter says:

    Klasse,
    vielen Dank
    Frank-Peter

  27. Tobias says:

    Genial, vielen Dank!

  28. Andi says:

    WIrklich super Sache! Danke
    (durch Google gefunden)

  29. I love you says:

    many thanks :)

  30. DK says:

    Hi,

    as seen on http://www.w3schools.com/jsref/jsref_replace.asp, you can use .replace also for multiple occurrences with the use of the “g” (global) operator… see example 3

    “asdasdasd”.replace(/sd/g, “X”); –> aXaXaX

    nevertheless, thanks for your thoughts

    best regards, DK

  31. Tom says:

    Genial!

  32. Andreas says:

    Tolle Funktion! Vielen Dank!

  33. Stefan says:

    Vielen Dank für die Simple aber effektive Lösung.

  34. Mecki says:

    danke!

  35. Moritz says:

    danke :)

  36. peter says:

    danke! :D

  37. Manuel says:

    kool. Vielen Dank.
    Abhilfe für das Semikolon-Problem erhalte ich durch Setzen des Semikolons.

  38. CrC says:

    Genial, genau das wonach ich gerade gesucht habe. Danke.

  39. Fritz says:

    Klasse. Konnte ich gut gebrauchen. Danke dafür.

  40. Pappi says:

    Dir und google sei gedankt für diesen Beitrag. :-)

  41. Sören Habet says:

    Geil, danke.
    Als PHPler bin ich es auch gewohnt, Ausdrücke schnell mit str_replace() zu ersetzen. Da ich erst neu mit JS angefangen habe, und alles sehr sehr ungewohnt ist…
    Vielen Dank + Viele Grüße

  42. Alex says:

    Perfekt.
    Optimales Ergebnis. DANKE!

Leave a Reply