Gibt es ein C#-String.Format()-Äquivalent in JavaScript? [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
David Thiele

C# hat das wirklich mächtig String.Format() zum Ersetzen von Elementen wie {0}mit Parametern. Hat JavaScript ein Äquivalent?

  • Es gibt kein eingebautes Äquivalent, aber Sie können nach externen Bibliotheken googeln.

    – Kirilloide

    23. August 2013 um 14:48 Uhr

  • Eine weitere Option ist CoffeeScript, das über String-Interpolation im Ruby-Stil verfügt.

    – Matt Greer

    23. August 2013 um 14:49 Uhr

  • eine Lösung, die eine Argumentformatierung basierend auf dem tatsächlichen .net-Code ermöglicht: stackoverflow.com/questions/2534803/string-format-in-javascript

    – JasonS

    12. Januar 2015 um 23:11 Uhr

  • Das ist das falsche Duplikat. Dies ist eine Frage zu string.format in JavaScriptund der Betrüger ist für jQuery. JavaScript !== jQuery. Es gibt nicht einmal ein jQuery-Tag. Sie könnten argumentieren, dass diese Frage (“JavaScript-Äquivalent zu printf/string.format”) das richtige “Original” ist, das aktuell verlinkte jedoch nicht.

    – Rufin

    10. Juni 2015 um 14:55 Uhr


  • Wir suchen eine Nicht-jQuery Antworten. Wie können Sie den jQuery-Beitrag für diese Frage als Duplikat markieren? Das ist von Seiten der kollektiven Benutzer, die dafür gestimmt haben, dies zu schließen, äußerst ignorant. Abstimmung zur Wiedereröffnung, übrigens.

    – code4life

    5. Januar 2017 um 16:06 Uhr

Benutzer-Avatar
Scott

Versuchen sprintf() für Javascript.

Oder

// First, checks if it isn't implemented yet.
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
      ;
    });
  };
}

"{0} is dead, but {1} is alive! {0} {2}".format("ASP", "ASP.NET")

Beide Antworten stammen aus JavaScript, das printf/string.format entspricht

  • eine Lösung, die eine Argumentformatierung basierend auf dem tatsächlichen .net-Code ermöglicht: stackoverflow.com/questions/2534803/string-format-in-javascript

    – JasonS

    12. Januar 2015 um 23:11 Uhr

  • Wenn Sie den Prototyp nicht erweitern möchten: export class String { //String.format("{0} comes before {1}", "a", "b") static format(stringToFormat, ...tokens) { return stringToFormat.replace(/{(\d+)}/g, function (match, number) { return typeof tokens[number] != 'undefined' ? tokens[number] : match; }); }; }

    – Wunder

    20. März 2018 um 12:36 Uhr


  • Ja, ich denke, es ist eine schlechte Praxis, den Prototyp von Standardobjekten zu erweitern.

    – wm1sr

    7. Januar 2019 um 21:32 Uhr

Benutzer-Avatar
Vlad Bezden

Ich benutze:

String.prototype.format = function() {
    var s = this,
        i = arguments.length;

    while (i--) {
        s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
    }
    return s;
};

Verwendungszweck: "Hello {0}".format("World");

Ich habe es bei Equivalent of String.format in JQuery gefunden

AKTUALISIERT:

In ES6/ES2015 können Sie verwenden Zeichenfolgenvorlage zum Beispiel

'use strict';

let firstName="John",
    lastName="Smith";

console.log(`Full Name is ${firstName} ${lastName}`); 
// or
console.log(`Full Name is ${firstName + ' ' + lastName}');

  • Obwohl String-Templating ein nettes Feature ist, ist es nicht dasselbe. Sie können die Zeichenfolge nicht im Speicher oder anderweitig (z. B. in einer Registrierung) speichern und sie zu einem späteren Zeitpunkt während der Laufzeit mit beliebigen Eingaben verwenden.

    – Mike Haas

    29. September 2016 um 20:29 Uhr

Benutzer-Avatar
t3chb0t

Basierend auf der Antwort von @Vlad Bezden verwende ich diesen leicht modifizierten Code, da ich benannte Platzhalter bevorzuge:

String.prototype.format = function(placeholders) {
    var s = this;
    for(var propertyName in placeholders) {
        var re = new RegExp('{' + propertyName + '}', 'gm');
        s = s.replace(re, placeholders[propertyName]);
    }    
    return s;
};

Verwendungszweck:

"{greeting} {who}!".format({greeting: "Hello", who: "world"})

String.prototype.format = function(placeholders) {
    var s = this;
    for(var propertyName in placeholders) {
        var re = new RegExp('{' + propertyName + '}', 'gm');
        s = s.replace(re, placeholders[propertyName]);
    }    
    return s;
};

$("#result").text("{greeting} {who}!".format({greeting: "Hello", who: "world"}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>

  • Großartig, viel besser geeignet für die Formatierung, wenn mehrere Variablen übergeben werden.

    – Strg-C

    29. November 2016 um 12:16 Uhr


Benutzer-Avatar
BrunoLM

Ich habe es vor langer Zeit erstellt, verwandte Frage

String.Format = function (b) {
    var a = arguments;
    return b.replace(/(\{\{\d\}\}|\{\d\})/g, function (b) {
        if (b.substring(0, 2) == "{{") return b;
        var c = parseInt(b.match(/\d/)[0]);
        return a[c + 1]
    })
};

1143470cookie-checkGibt es ein C#-String.Format()-Äquivalent in JavaScript? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy