Ich habe eine Zeichenfolge mit sagen: My Name is %NAME% and my age is %AGE%.
%XXX%
sind Platzhalter. Wir müssen dort Werte durch ein Objekt ersetzen.
Objekt sieht aus wie: {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"}
Ich muss das Objekt analysieren und die Zeichenfolge durch entsprechende Werte ersetzen. Die endgültige Ausgabe lautet also:
Mein Name ist Mike und ich bin 26 Jahre alt.
Das Ganze muss entweder mit reinem Javascript oder mit jquery gemacht werden.
javascript
jquery
string
string-formatting
Joby Joseph
quelle
quelle
{NAME: "Mike", AGE: 26, EVENT: 20}
? Natürlich müssen diese Schlüssel weiterhin mit Prozentzeichen in der Eingabezeichenfolge versehen sein.Antworten:
Die Anforderungen der ursprünglichen Frage konnten eindeutig nicht von der Zeichenfolgeninterpolation profitieren, da es sich anscheinend um eine Laufzeitverarbeitung beliebiger Ersatzschlüssel handelt.
Allerdings , wenn Sie nur String - Interpolation zu tun haben, können Sie:
Beachten Sie die Backticks, die die Zeichenfolge begrenzen. Sie sind erforderlich.
Für eine Antwort, die den Anforderungen des jeweiligen OP entspricht, können Sie diese
String.prototype.replace()
als Ersatz verwenden.Der folgende Code behandelt alle Übereinstimmungen und berührt keine ohne Ersatz (solange Ihre Ersatzwerte alle Zeichenfolgen sind, falls nicht, siehe unten).
jsFiddle .
Wenn einige Ihrer Ersetzungen keine Zeichenfolgen sind, stellen Sie sicher, dass sie zuerst im Objekt vorhanden sind. Wenn Sie ein Format wie das Beispiel haben, dh in Prozentzeichen eingeschlossen, können Sie den
in
Operator verwenden, um dies zu erreichen.jsFiddle .
Wenn Ihr Format jedoch kein spezielles Format hat, dh keine Zeichenfolge, und Ihr Ersatzobjekt keinen
null
Prototyp hat, verwenden Sie esObject.prototype.hasOwnProperty()
, es sei denn, Sie können garantieren, dass keine Ihrer potenziell ersetzten Teilzeichenfolgen mit den Eigenschaftsnamen des Prototyps kollidiert.jsFiddle .
Andernfalls würden Sie, wenn Ihre Ersatzzeichenfolge
'hasOwnProperty'
wäre, eine resultierende durcheinandergebrachte Zeichenfolge erhalten.jsFiddle .
Als Randnotiz sollten Sie
replacements
einObject
, nicht ein genannt werdenArray
.quelle
return replacements[all] || all
, um%NotInReplacementsList%
Fälle abzudecken .return all in params ? params[all] : all;
0
. In diesem Fall hat es nicht funktioniert.Wie wäre es mit ES6-Vorlagenliteralen?
Mehr über Vorlagenliterale ...
quelle
Sie können JQuery (jquery.validate.js) verwenden, damit es problemlos funktioniert.
Oder wenn Sie nur diese Funktion verwenden möchten, können Sie diese Funktion definieren und einfach so verwenden
Gutschrift an das Team von jquery.validate.js
quelle
$.each
Sie könnte machen,String.prototype.format=function(p){var s=this,r=function(v,i){s=s.replace(new RegExp("\\{"+i+"\\}","g"),v);};p.forEach(r);return s;}
damit Sie jquery nicht nur für diese einschließen müssen;)Wie bei einem modernen Browser wird der Platzhalter von der neuen Version von Chrome / Firefox unterstützt, ähnlich wie bei der C-Funktion
printf()
.Platzhalter:
%s
String.%d
,%i
Ganzzahl.%f
Gleitkommazahl.%o
Objekt-Hyperlink.z.B
Übrigens, um die Ausgabe zu sehen:
Ctrl + Shift + J
oderF12
, um das Entwicklertool zu öffnen.Ctrl + Shift + K
oderF12
, um das Entwicklertool zu öffnen.@Update - Unterstützung von nodejs
Scheint, dass NodeJS nicht unterstützen
%f
, sondern%d
in NodeJS verwendet werden könnten. Mit%d
Nummer wird als Gleitkommazahl gedruckt, nicht nur als Ganzzahl.quelle
Benutz einfach
replace()
quelle
Sie können eine benutzerdefinierte Ersetzungsfunktion wie folgt verwenden:
Sie können sehen, dass es hier funktioniert: http://jsfiddle.net/jfriend00/DyCwk/ .
quelle
Wenn Sie etwas näher an console.log tun möchten, z. B.% s Platzhalter wie in ersetzen
Ich habe das geschrieben
Sie erhalten
AKTUALISIEREN
Ich habe eine einfache Variante hinzugefügt
String.prototype
, die beim Umgang mit String-Transformationen nützlich ist. Hier ist sie:In diesem Fall werden Sie tun
Versuchen Sie diese Version hier
quelle
formatMessage(message: string, values: string[]) { let i = 0; return message.replace(/%\w+%/g, (match, idx) => { return values[i++]; }); }
Dies%SOME_VALUE%
So können Sie genau das tun
NPM: https://www.npmjs.com/package/stringinject
GitHub: https://github.com/tjcafferkey/stringinject
Gehen Sie wie folgt vor:
quelle
Als schnelles Beispiel:
Die Ausgabe ist:
quelle
console.log
?Hier ist eine andere Möglichkeit, dies zu tun, indem es6-Vorlagenliterale zur Laufzeit dynamisch verwendet werden.
quelle
quelle
Verwenden Sie diese Funktion.
Beispiel
Ausgabe
quelle
Derzeit gibt es in Javascript noch keine native Lösung für dieses Verhalten. Mit Tags versehene Vorlagen sind verwandt, lösen sie jedoch nicht.
Hier gibt es einen Refaktor von Alex 'Lösung mit einem Objekt zum Ersetzen.
Die Lösung verwendet Pfeilfunktionen und eine ähnliche Syntax für die Platzhalter wie die native Javascript- Interpolation in Vorlagenliteralen (
{}
anstelle von%%
). Es ist auch nicht erforderlich, Trennzeichen (%
) in die Namen der Ersetzungen aufzunehmen.Es gibt zwei Geschmacksrichtungen: beschreibend und reduziert.
Beschreibende Lösung:
Reduzierte Lösung:
quelle