205 Stimmen

Äquivalent von String.format in jQuery

Ich versuche, einige JavaScript-Code von MicrosoftAjax zu JQuery zu verschieben. Ich verwende die JavaScript-Äquivalente in MicrosoftAjax der beliebten .net-Methoden, z. B. String.format(), String.startsWith(), etc. Gibt es Äquivalente zu diesen Methoden in JQuery?

17voto

fiestacasey Punkte 617

Wenn Sie das Validierungs-Plugin verwenden, können Sie es benutzen:

jQuery.validator.format("{0} {1}", "cool", "formatting") = 'cool formatting'

http://docs.jquery.com/Plugins/Validation/jQuery.validator.format#templateargumentargumentN ...

13voto

Brian Punkte 36229

Obwohl es nicht genau das ist, wonach Q gefragt hat, habe ich ein ähnliches System gebaut, das aber benannte statt nummerierte Platzhalter verwendet. Ich persönlich ziehe es vor, benannte Argumente zu haben und einfach ein Objekt als Argument zu senden (ausführlicher, aber leichter zu pflegen).

String.prototype.format = function (args) {
    var newStr = this;
    for (var key in args) {
        newStr = newStr.replace('{' + key + '}', args[key]);
    }
    return newStr;
}

Hier ist ein Beispiel für die Verwendung...

alert("Hello {name}".format({ name: 'World' }));

12voto

david Punkte 2347

Mit einem modernen Browser, der EcmaScript 2015 (ES6) unterstützt, können Sie Folgendes genießen Vorlage Strings . Anstatt zu formatieren, können Sie den Variablenwert direkt in den Text einfügen:

var name = "Waleed";
var message = `Hello ${name}!`;

Beachten Sie, dass die Schablonenzeichenfolge mit Back-Ticks (`) geschrieben werden muss.

6voto

Keine der bisher vorgestellten Antworten hat eine offensichtliche Optimierung der Verwendung von enclosure zur einmaligen Initialisierung und Speicherung regulärer Ausdrücke für spätere Verwendungen.

// DBJ.ORG string.format function
// usage:   "{0} means 'zero'".format("nula") 
// returns: "nula means 'zero'"
// place holders must be in a range 0-99.
// if no argument given for the placeholder, 
// no replacement will be done, so
// "oops {99}".format("!")
// returns the input
// same placeholders will be all replaced 
// with the same argument :
// "oops {0}{0}".format("!","?")
// returns "oops !!"
//
if ("function" != typeof "".format) 
// add format() if one does not exist already
  String.prototype.format = (function() {
    var rx1 = /\{(\d|\d\d)\}/g, rx2 = /\d+/ ;
    return function() {
        var args = arguments;
        return this.replace(rx1, function($0) {
            var idx = 1 * $0.match(rx2)[0];
            return args[idx] !== undefined ? args[idx] : (args[idx] === "" ? "" : $0);
        });
    }
}());

alert("{0},{0},{{0}}!".format("{X}"));

Außerdem respektiert keines der Beispiele die format()-Implementierung, wenn eine solche bereits existiert.

6voto

RickL Punkte 3108

Die Nachsaison ist zwar schon lange vorbei, aber ich habe mir gerade die Antworten angesehen und möchte meinen Senf dazu geben:

Verwendung:

var one = strFormat('"{0}" is not {1}', 'aalert', 'defined');
var two = strFormat('{0} {0} {1} {2}', 3.14, 'a{2}bc', 'foo');

Methode:

function strFormat() {
    var args = Array.prototype.slice.call(arguments, 1);
    return arguments[0].replace(/\{(\d+)\}/g, function (match, index) {
        return args[index];
    });
}

Ergebnis:

"aalert" is not defined
3.14 3.14 a{2}bc foo

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X