Ersetzen von Text innerhalb von Curley Braces JavaScript

8

Ich versuche JavaScript zu verwenden, um Inhalt in geschweiften Klammern dynamisch zu ersetzen. Hier ist ein Beispiel meines Codes:

%Vor%

Der obige Code sollte ausgeben "Dies ist Johns einfacher String in JavaScript! Ja, ein String!".

Folgendes passiert:

  1. Wir erhalten eine Zeichenfolge mit Werten in geschweiften Klammern, die ersetzt werden müssen
  2. Eine Schleife verwendet "replaceArray", um alle Werte in geschweiften Klammern zu finden, die ersetzt werden müssen
  3. Diese Werte werden zusammen mit den geschweiften Klammern durch die entsprechenden Werte im Array "replaceWith"
  4. ersetzt

Allerdings habe ich kein Glück, zumal ein Wert an mehreren Stellen ersetzt werden kann und ich einen dynamischen Wert innerhalb des regulären Ausdrucks habe.

Kann mir jemand helfen, dies zu beheben, indem ich ein ähnliches Setup wie oben verwende?

    
Oliver Spryn 17.03.2011, 02:53
quelle

3 Antworten

10

Erstens ist String.replace nicht destruktiv - es ändert nicht die Zeichenkette selbst, also musst du myString = myString.replace(...) setzen. Zweitens können Sie RegExp -Objekte dynamisch mit new RegExp erstellen, also wäre das Ergebnis von allem:

%Vor%     
Yi Jiang 17.03.2011, 03:00
quelle
3

Hier ist eine Funktion, die die Zeichenfolge und ein Array von Ersetzungen verwendet. Es ist flexibel genug, um wiederverwendet zu werden. Der einzige Haken ist, dass Sie Zahlen in Ihrer Zeichenfolge anstelle von Zeichenfolgen verwenden müssen. z.B.

%Vor%

Demo: Ссылка

    
inorganik 27.11.2014 00:33
quelle
3

Strings sind unveränderlich

Strings in JavaScript sind unveränderbar. Es bedeutet, dass dies niemals so funktioniert, wie Sie es erwarten:

%Vor%

Dies ist nicht nur ein Problem mit .replace() - nichts kann eine Zeichenfolge in JavaScript verändern. Was Sie stattdessen tun können, ist:

%Vor%

Regex-Literale interpolieren keine Werte

Literale für reguläre Ausdrücke in JavaScript interpolieren keine Werte, so dass dies immer noch nicht funktioniert:

%Vor%

Sie müssen stattdessen Folgendes tun:

%Vor%

Aber das ist ein bisschen unordentlich, so dass Sie zuerst eine Liste von Regexes erstellen können:

%Vor%

Wie Sie sehen, können Sie auch i < replaceArray.length anstelle von i <= replaceArray.length - 1 verwenden, um Ihre Schleifenbedingung zu vereinfachen.

Aktualisierung 2017

Jetzt können Sie es noch einfacher machen:

%Vor%

Ohne Schleife

Anstatt die Funktion .replace() immer wieder zu durchlaufen und anzuwenden, können Sie dies nur einmal tun:

%Vor%

Siehe DEMO .

Templating Engines

Sie erstellen im Grunde Ihre eigene Template-Engine. Wenn Sie stattdessen eine fertige Lösung verwenden möchten, sollten Sie Folgendes in Betracht ziehen:

oder so ähnlich.

Ein Beispiel für das, was Sie mit Moustache versuchen möchten, wäre:

%Vor%

Siehe DEMO .

    
rsp 17.03.2011 02:59
quelle