Verwendung von String.Format in JavaScript?

73

Das macht mich verrückt. Ich glaube, ich habe genau dieselbe Frage gestellt, aber ich kann sie nicht mehr finden (ich habe die Stapelüberlaufsuche, die Google-Suche verwendet, meine Beiträge manuell durchsucht und meinen Code durchsucht).

Ich wollte etwas, das dem C # String.Format ähnelt, in dem Sie so etwas tun können

string format = String.Format("Hi {0}",name);

Natürlich nur für JavaScript und eine Person gab mir eine einfache Antwort. Es war nicht wie ein jQuery-Plugin oder so, aber ich denke, Sie haben etwas JSON-Ding oder so gemacht, und es hat funktioniert und war einfach zu bedienen.

Ich kann diesen Beitrag für mein Leben nicht finden.

Ich habe dies in meinem Code, aber ich kann anscheinend nichts finden, das es verwendet, und ich bin mir ziemlich sicher, dass ich es ein paar Mal verwendet habe:

String.prototype.format = function(o)
{
    return this.replace(/{([^{}]*)}/g,
       function(a, b)
       {
           var r = o[b];
           return typeof r === 'string' ? r : a;
       }
    );
};
chobo2
quelle
1
Oder vielleicht das: geekdaily.net/2007/06/21/cs-stringformat-for-javascript
Michael Petrotta
Nein, das glaube ich nicht. Ich dachte, ich hätte mit dem Beitrag begonnen, aber ich erinnere mich, dass ich diese Vorschläge zur Bibliothek gesehen habe, aber dies war keine Bibliothek.
Chobo2

Antworten:

72

Passen Sie den Code aus der MsAjax-Zeichenfolge an .

Entfernen _validateParamsSie einfach den gesamten Code und Sie sind auf dem besten Weg zu einer vollwertigen .NET-Zeichenfolgenklasse in JavaScript.

Okay, ich habe die msajax-Zeichenfolgenklasse freigegeben und alle msajax-Abhängigkeiten entfernt. Es funktioniert hervorragend, genau wie die .NET-Zeichenfolgenklasse, einschließlich Trimmfunktionen, EndsWith / StartsWith usw.

PS: Ich habe alle Visual Studio JavaScript IntelliSense-Helfer und XmlDocs an Ort und Stelle gelassen. Sie sind harmlos, wenn Sie Visual Studio nicht verwenden, aber Sie können sie entfernen, wenn Sie möchten.

<script src="script/string.js" type="text/javascript"></script>
<script type="text/javascript">
    var a = String.format("Hello {0}!", "world");
    alert(a);

</script>

String.js

// String.js - liberated from MicrosoftAjax.js on 03/28/10 by Sky Sanders
// permalink: http://stackoverflow.com/a/2534834/2343

/*
    Copyright (c) 2009, CodePlex Foundation
    All rights reserved.

    Redistribution and use in source and binary forms, with or without modification, are permitted
    provided that the following conditions are met:

    *   Redistributions of source code must retain the above copyright notice, this list of conditions
        and the following disclaimer.

    *   Redistributions in binary form must reproduce the above copyright notice, this list of conditions
        and the following disclaimer in the documentation and/or other materials provided with the distribution.

    *   Neither the name of CodePlex Foundation nor the names of its contributors may be used to endorse or
        promote products derived from this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED
    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
    IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</textarea>
*/

(function(window) {

    $type = String;
    $type.__typeName = 'String';
    $type.__class = true;

    $prototype = $type.prototype;
    $prototype.endsWith = function String$endsWith(suffix) {
        /// <summary>Determines whether the end of this instance matches the specified string.</summary>
        /// <param name="suffix" type="String">A string to compare to.</param>
        /// <returns type="Boolean">true if suffix matches the end of this instance; otherwise, false.</returns>
        return (this.substr(this.length - suffix.length) === suffix);
    }

    $prototype.startsWith = function String$startsWith(prefix) {
        /// <summary >Determines whether the beginning of this instance matches the specified string.</summary>
        /// <param name="prefix" type="String">The String to compare.</param>
        /// <returns type="Boolean">true if prefix matches the beginning of this string; otherwise, false.</returns>
        return (this.substr(0, prefix.length) === prefix);
    }

    $prototype.trim = function String$trim() {
        /// <summary >Removes all leading and trailing white-space characters from the current String object.</summary>
        /// <returns type="String">The string that remains after all white-space characters are removed from the start and end of the current String object.</returns>
        return this.replace(/^\s+|\s+$/g, '');
    }

    $prototype.trimEnd = function String$trimEnd() {
        /// <summary >Removes all trailing white spaces from the current String object.</summary>
        /// <returns type="String">The string that remains after all white-space characters are removed from the end of the current String object.</returns>
        return this.replace(/\s+$/, '');
    }

    $prototype.trimStart = function String$trimStart() {
        /// <summary >Removes all leading white spaces from the current String object.</summary>
        /// <returns type="String">The string that remains after all white-space characters are removed from the start of the current String object.</returns>
        return this.replace(/^\s+/, '');
    }

    $type.format = function String$format(format, args) {
        /// <summary>Replaces the format items in a specified String with the text equivalents of the values of   corresponding object instances. The invariant culture will be used to format dates and numbers.</summary>
        /// <param name="format" type="String">A format string.</param>
        /// <param name="args" parameterArray="true" mayBeNull="true">The objects to format.</param>
        /// <returns type="String">A copy of format in which the format items have been replaced by the   string equivalent of the corresponding instances of object arguments.</returns>
        return String._toFormattedString(false, arguments);
    }

    $type._toFormattedString = function String$_toFormattedString(useLocale, args) {
        var result = '';
        var format = args[0];

        for (var i = 0; ; ) {
            // Find the next opening or closing brace
            var open = format.indexOf('{', i);
            var close = format.indexOf('}', i);
            if ((open < 0) && (close < 0)) {
                // Not found: copy the end of the string and break
                result += format.slice(i);
                break;
            }
            if ((close > 0) && ((close < open) || (open < 0))) {

                if (format.charAt(close + 1) !== '}') {
                    throw new Error('format stringFormatBraceMismatch');
                }

                result += format.slice(i, close + 1);
                i = close + 2;
                continue;
            }

            // Copy the string before the brace
            result += format.slice(i, open);
            i = open + 1;

            // Check for double braces (which display as one and are not arguments)
            if (format.charAt(i) === '{') {
                result += '{';
                i++;
                continue;
            }

            if (close < 0) throw new Error('format stringFormatBraceMismatch');


            // Find the closing brace

            // Get the string between the braces, and split it around the ':' (if any)
            var brace = format.substring(i, close);
            var colonIndex = brace.indexOf(':');
            var argNumber = parseInt((colonIndex < 0) ? brace : brace.substring(0, colonIndex), 10) + 1;

            if (isNaN(argNumber)) throw new Error('format stringFormatInvalid');

            var argFormat = (colonIndex < 0) ? '' : brace.substring(colonIndex + 1);

            var arg = args[argNumber];
            if (typeof (arg) === "undefined" || arg === null) {
                arg = '';
            }

            // If it has a toFormattedString method, call it.  Otherwise, call toString()
            if (arg.toFormattedString) {
                result += arg.toFormattedString(argFormat);
            }
            else if (useLocale && arg.localeFormat) {
                result += arg.localeFormat(argFormat);
            }
            else if (arg.format) {
                result += arg.format(argFormat);
            }
            else
                result += arg.toString();

            i = close + 1;
        }

        return result;
    }

})(window);
Sky Sanders
quelle
1
Ich wusste nicht, dass Javascript wie C ... :-D aussehen kann. Sehr gute Arbeit Sky, danke, dass du dir die Zeit genommen hast, es zu kommentieren!
Sean Vieira
2
@ Sean, ich habe weder den Code noch die Kommentare geschrieben, sondern nur die Zeichenfolgenklasse von msajax übernommen und alle externen Abhängigkeiten entfernt / ersetzt. Dies gibt Ihnen viele sehr nützliche und vertraute Zeichenfolgenfunktionen von .net. Ich denke, wenn Sie etwas tun wollen, machen Sie es richtig. Triviale, spröde Schnur-Munging-Schnipsel sind ein Rezept für Kopfschmerzen.
Sky Sanders
Hmm, ich werde das in ein paar Minuten überprüfen. Danke, aber musst du alles zu einer Schnur machen? Wie könnte ich eine Variable haben, in der "Welt" wie der String ist. Format nimmt ein Objekt auf. Es gibt auch ein Limit für die Anzahl der Platzhalter, die Sie einsenden können. Ich kenne String.Format Nach 3 Platzhaltern müssen Sie ein Array
einschicken
@ chobo2 - nein, genau wie in .net hat jedes Objekt in js eine .toString-Funktion. Übergeben Sie alles, was Sie wollen. Im Gegensatz zu .net erleichtert das Argumentobjekt das Akzeptieren einer beliebigen Anzahl von Argumenten. Fügen Sie also einfach so viele hinzu, wie Sie möchten. String.format("{0},....",true,"aString",new Date(),["a","b"]); Sinn ergeben?
Sky Sanders
1
Kann ich vorschlagen, die URL Ihrer Antwort stackoverflow.com/a/2534834/21061 in das Skript einzubetten ? Es ist nützlich, zur Quelle zurückkehren zu können
Ian
43

Hier ist was ich benutze. Ich habe diese Funktion in einer Dienstprogrammdatei definiert:

  String.format = function() {
      var s = arguments[0];
      for (var i = 0; i < arguments.length - 1; i++) {       
          var reg = new RegExp("\\{" + i + "\\}", "gm");             
          s = s.replace(reg, arguments[i + 1]);
      }
      return s;
  }

Und ich nenne es so:

var greeting = String.format("Hi, {0}", name);

Ich erinnere mich nicht, wo ich das gefunden habe, aber es war sehr nützlich für mich. Ich mag es, weil die Syntax der C # -Version entspricht.

Jeremy
quelle
3
Sie haben es wahrscheinlich von Microsoft Ajax lib erhalten: stackoverflow.com/a/1038930/114029
Leniel Maccaferri
Ich habe einige Fehler von dieser Funktion
Salvatore Di Fazio
5
@Salvatore Di Fazio: Können Sie die Fehler näher erläutern?
The_Black_Smurf
1
Sie sollten keine Objekte ändern, die nicht von Ihnen erstellt wurden (z. B. native Objekte wie String).
Machado
20

Sie können eine Reihe von Ersetzungen wie folgt durchführen:

function format(str)
{
    for(i = 1; i < arguments.length; i++)
    {
        str = str.replace('{' + (i - 1) + '}', arguments[i]);
    }
    return str;
}

Ein besserer Ansatz ist die Verwendung von Ersetzen durch Funktionsparameter:

function format(str, obj) {
    return str.replace(/\{\s*([^}\s]+)\s*\}/g, function(m, p1, offset, string) {
        return obj[p1]
    })
}

Auf diese Weise können Sie sowohl Indizes als auch benannte Parameter angeben:

var arr = ['0000', '1111', '2222']

arr.a = 'aaaa'

str = format(" { 0 } , {1}, { 2}, {a}", arr)
// returns 0000 , 1111, 2222, aaaa
vittore
quelle
@Ismail: werfen Sie einen Blick auf die Geschichte der Veränderungen wurde es mit falschen quot char reformated
vittore
1
+1 Danke. Funktioniert jetzt großartig. Überprüfen Sie es hier auf JsFiddle
IsmailS
@vittore Die zweite Methode ist sehr cool, aber ich kann sie nicht zum Laufen bringen. Es findet die richtigen Zeichenfolgen zum Abrufen von Eigenschaften, ersetzt sie jedoch nicht ( zumindest
1
@gordatron Sie übergeben keine Parameter als Objekt. jsfiddle.net/9Jpkv/27
vittore
14

Ohne Drittanbieterfunktion:

string format = "Hi {0}".replace('{0}', name)

Mit mehreren Parametern:

string format = "Hi {0} {1}".replace('{0}', name).replace('{1}', lastname)
Dustin Laine
quelle
Hmm, schau dir an, was ich gepostet habe, da ich nicht sicher bin, was genau funktioniert, aber es wird ersetzt. Wie ich schon sagte, ich erinnere mich, dass es json oder vielleicht eine Reihe von Sachen verwendet hat. Es könnte also nur eine ausgefeiltere Art sein, was Sie tun.
Chobo2
1
Ja, ich bin mir nicht sicher, nach welchem ​​Beitrag Sie suchen. Dies ist eine einfache Alternative mit integrierten JS-Funktionen.
Dustin Laine
4
"Hi {0} {1}. {0}. ".replace('{0}', "John").replace('{1}', "Smith");Rückkehr"Hi John Smith. {0}."
IsmailS
12

Hier ist eine nützliche Funktion zur Formatierung von Zeichenfolgen mit regulären Ausdrücken und Erfassungen:

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

Strings können wie C # String.Format formatiert werden:

var str = format('{0}, {1}!', 'Hello', 'world');
console.log(str); // prints "Hello, world!"

Das Format platziert die richtige Variable an der richtigen Stelle, auch wenn sie nicht in der richtigen Reihenfolge angezeigt wird:

var str = format('{1}, {0}!', 'Hello', 'world');
console.log(str); // prints "world, Hello!"

Hoffe das hilft!

pje
quelle
3

String.FormatMethode aus .NET Framework hat mehrere Signaturen . Dasjenige, das mir am besten gefällt, verwendet das Schlüsselwort params in seinem Prototyp, dh:

public static string Format(
    string format,
    params Object[] args
)

Mit dieser Version können Sie nicht nur eine variable Anzahl von Argumenten übergeben, sondern auch ein Array-Argument.

Da mir die einfache Lösung von Jeremy gefällt, möchte ich sie ein wenig erweitern:

var StringHelpers = {
    format: function(format, args) {
        var i;
        if (args instanceof Array) {
            for (i = 0; i < args.length; i++) {
                format = format.replace(new RegExp('\\{' + i + '\\}', 'gm'), args[i]);
            }
            return format;
        }
        for (i = 0; i < arguments.length - 1; i++) {
            format = format.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i + 1]);
        }
        return format;
    }
};

Jetzt können Sie Ihre JavaScript-Version von String.Formatauf folgende Weise verwenden:

StringHelpers.format("{0}{1}", "a", "b")

und

StringHelpers.format("{0}{1}", ["a", "b"])
jwaliszko
quelle
Vielen Dank, diese Version bot
Todd Richardson
2

Basierend auf der Antwort von @ roydukkey, etwas optimierter für die Laufzeit (es werden die regulären Ausdrücke zwischengespeichert):

(function () {
    if (!String.prototype.format) {
        var regexes = {};
        String.prototype.format = function (parameters) {
            for (var formatMessage = this, args = arguments, i = args.length; --i >= 0;)
                formatMessage = formatMessage.replace(regexes[i] || (regexes[i] = RegExp("\\{" + (i) + "\\}", "gm")), args[i]);
            return formatMessage;
        };
        if (!String.format) {
            String.format = function (formatMessage, params) {
                for (var args = arguments, i = args.length; --i;)
                    formatMessage = formatMessage.replace(regexes[i - 1] || (regexes[i - 1] = RegExp("\\{" + (i - 1) + "\\}", "gm")), args[i]);
                return formatMessage;
            };
        }
    }
})();
Adaptabi
quelle
Sieht in Ordnung aus, aber Sie sollten die Variable "Regexes" mit einem Namespace versehen, damit sie nicht global verfügbar ist.
Roydukkey
Einfach in eine anonyme selbst ausgeführte Funktion eingewickelt
Adaptabi
Richtig. Ich wusste nicht, welche Lösung Sie bevorzugen. Ich könnte mit so etwas gegangen sein String.format.cache. Trotzdem für jeden sein eigenes. Vielen Dank.
Roydukkey
2

Hier ist eine Lösung, die nur mit String.prototype funktioniert:

String.prototype.format = function() {
    var s = this;
    for (var i = 0; i < arguments.length; i++) {       
        var reg = new RegExp("\\{" + i + "\\}", "gm");             
        s = s.replace(reg, arguments[i]);
    }
    return s;
}
Jonathan
quelle
2
if (!String.prototype.format) {
    String.prototype.format = function () {
        var args = arguments;
        return this.replace(/{(\d+)}/g, function (match, number) {
            return typeof args[number] != 'undefined'
              ? args[number]
              : match
            ;
        });
    };
}

Verwendung:

'{0}-{1}'.format('a','b');
// Result: 'a-b'

JSFiddle

Mikael Engver
quelle
2

Erstellen und verwenden Sie einfach diese Funktion:

function format(str, args) {
   for (i = 0; i < args.length; i++)
      str = str.replace("{" + i + "}", args[i]);
   return str;
}

Wenn Sie den str- Parameter nicht ändern möchten for, klonen (duplizieren) Sie ihn vor der Schleife in eine neue Zeichenfolge (erstellen Sie eine neue Kopie von str ), setzen Sie die Kopie in die forSchleife und geben Sie sie schließlich anstelle von zurück Parameter selbst.

In C # (Sharp) ist es einfach, eine Kopie durch einfaches Aufrufen zu erstellen String.Clone(), aber ich weiß nicht, wie in JavaScript, aber Sie können bei Google suchen oder im Internet surfen und lernen, wie das geht.

Ich habe Ihnen gerade meine Idee zum String-Format in JavaScript gegeben.

Peter Mortensen
quelle
2

Verwenden Sie ein Vorlagenliteral in ECMAScript 6:

var customer = { name: "Foo" }
var card = { amount: 7, product: "Bar", unitprice: 42 }
var message = `Hello ${customer.name},
               want to buy ${card.amount} ${card.product} for
               a total of ${card.amount * card.unitprice} bucks?`
Gavin
quelle
1

Abgesehen von der Tatsache, dass Sie den String-Prototyp ändern, ist an der von Ihnen bereitgestellten Funktion nichts auszusetzen. So würden Sie es verwenden:

"Hello {0},".format(["Bob"]);

Wenn Sie es als eigenständige Funktion haben möchten, können Sie es leicht ändern:

function format(string, object) {
    return string.replace(/{([^{}]*)}/g,
       function(match, group_match)
       {
           var data = object[group_match];
           return typeof data === 'string' ? data : match;
       }
    );
}

Vittores Methode ist auch gut; Seine Funktion wird aufgerufen, wobei jede zusätzliche Formatierungsoption als Argument übergeben wird, während Ihre ein Objekt erwartet.

Wie das tatsächlich aussieht, ist John Resigs Micro-Templating-Engine .

Sean Vieira
quelle
+1: Nachdem Sean diesen Eintrag erneut gelesen hatte, schlug er mich auf die Antwort "Ihre Funktion erledigt dies bereits". Wenn Sie ein Array (wie das Beispiel von Sean zeigt) an die Formatierungsfunktion übergeben, wird der Index [0] "Bob" zugeordnet.
David
1

Ihre Funktion verwendet bereits ein JSON-Objekt als Parameter:

string format = "Hi {foo}".replace({
    "foo": "bar",
    "fizz": "buzz"
});

Wenn Sie bemerken, der Code:

var r = o[b];

schaut auf Ihren Parameter (o) und verwendet ein Schlüssel-Wert-Paar darin, um das "Ersetzen" aufzulösen

David
quelle
Da Sie einen Prototyp einer String-Funktion definieren, können Probleme auftreten, wenn JS von Drittanbietern auf Ihrer Seite versucht, dasselbe zu tun (unwahrscheinlich, aber möglich).
David
Ich denke das ist genau das. Wie könnte ich in meinem Code danach suchen, um zu sehen, ob ich es verwende? Wie in VS-Javascript-Dateien können Sie nicht nach allen Referenzen suchen, und die einzigen, die ich bisher gesehen habe, sind Jquery.format, was meiner Meinung nach anders ist.
Chobo2
Suche nach mehreren Dateien (in jedem HTML, PHP / ASP / JSP und JS) für ".replace" (möglicherweise müssen Sie das "." Enthalten, wenn Sie eine RegEx durchführen). False Positives werden auf JQuery-Objekte angewendet (die selbst keine Zeichenfolgen sind).
David
1

Hier ist eine Lösung, die sowohl Prototyp- als auch Funktionsoptionen ermöglicht.

// --------------------------------------------------------------------
// Add prototype for 'String.format' which is c# equivalent
//
// String.format("{0} i{2}a night{1}", "This", "mare", "s ");
// "{0} i{2}a night{1}".format("This", "mare", "s ");
// --------------------------------------------------------------------

if(!String.format)
    String.format = function(){
        for (var i = 0, args = arguments; i < args.length - 1; i++)
            args[0] = args[0].replace("{" + i + "}", args[i + 1]);
        return args[0];
    };
if(!String.prototype.format && String.format)
    String.prototype.format = function(){
        var args = Array.prototype.slice.call(arguments).reverse();
        args.push(this);
        return String.format.apply(this, args.reverse())
    };

Genießen.

Roydukkey
quelle
Meine Intuition lässt mich annehmen, dass es nicht besser wäre, weil es Regex-Ersatz verwendet, aber der andere Weg, um sicher zu sein, wäre, die beiden zu profilieren. Man kann nur für den Moment raten. ;)
Roydukkey
1

Ich habe gerade angefangen, Java String.format()nach JavaScript zu portieren. Vielleicht finden Sie es auch nützlich.

Es unterstützt grundlegende Dinge wie diese:

StringFormat.format("Hi %s, I like %s", ["Rob", "icecream"]);

Was in ... endet

Hi Rob, I like icecream.

Aber auch fortgeschrittenere numerische Formatierungen und Datumsformatierungen wie:

StringFormat.format("Duke's Birthday: %1$tA %1$te %1$tB, %1$tY", [new Date("2014-12-16")]);

Duke's Birthday: Tuesday 16 December, 2014

Weitere Informationen finden Sie in den Beispielen.

Siehe hier: https://github.com/RobAu/javascript.string.format

RobAu
quelle
1
//Add "format" method to the string class
//supports:  "Welcome {0}. You are the first person named {0}".format("David");
//       and "First Name:{} Last name:{}".format("David","Wazy");
//       and "Value:{} size:{0} shape:{1} weight:{}".format(value, size, shape, weight)
String.prototype.format = function () {
    var content = this;
    for (var i = 0; i < arguments.length; i++) {
        var target = '{' + i + '}';
        content=content.split(target).join(String(arguments[i]))
        content = content.replace("{}", String(arguments[i]));
    }
    return content;
}
alert("I {} this is what {2} want and {} works for {2}!".format("hope","it","you"))

Mit dieser Funktion können Sie Positions- und "benannte" Ersatzpositionen mischen und anpassen.

davidWazy
quelle
1

Hier sind meine zwei Cent :

function stringFormat(str) {
  if (str !== undefined && str !== null) {
    str = String(str);
    if (str.trim() !== "") {
      var args = arguments;
      return str.replace(/(\{[^}]+\})/g, function(match) {
        var n = +match.slice(1, -1);
        if (n >= 0 && n < args.length - 1) {
          var a = args[n + 1];
          return (a !== undefined && a !== null) ? String(a) : "";
        }
        return match;
      });
    }
  }
  return "";
}

alert(stringFormat("{1}, {0}. You're looking {2} today.",
  "Dave", "Hello", Math.random() > 0.5 ? "well" : "good"));
jramos
quelle
0

Verwenden Sie die Sprintf- Bibliothek

Hier haben Sie einen Link, über den Sie die Funktionen dieser Bibliothek finden.

Alfredo A.
quelle
0
String.prototype.format = function () {
    var formatted = this;
    for (var arg in arguments) {
        formatted = formatted.split('{' + arg + '}').join(arguments[arg]);
    }
    return formatted;
};

VERWENDUNG:

'Hello {0}!'.format('Word')                 ->     Hello World!

'He{0}{0}o World!'.format('l')            ->     Hello World!

'{0} {1}!'.format('Hello', 'Word')     ->     Hello World!

'{0}!'.format('Hello {1}', 'Word')     ->     Hello World!

Cyrus
quelle