2415 Stimmen

JavaScript-Äquivalent zu printf/String.Format

Ich bin auf der Suche nach einem guten JavaScript-Äquivalent der C/PHP printf() oder für C#/Java-Programmierer, String.Format() ( IFormatProvider für .NET).

Meine Grundanforderung ist ein Tausendertrennzeichenformat für Zahlen für jetzt, aber etwas, das viele Kombinationen (einschließlich Daten) verarbeitet, wäre gut.

Ich weiß, dass Microsofts Ajax Bibliothek bietet eine Version von String.Format() aber wir wollen nicht den gesamten Overhead dieses Rahmens haben.

0voto

TheMisir Punkte 3525

Erstellen Sie in typescript eine Datei namens format.ts und importieren Sie es, wie immer Sie die Formatierung verwenden wollen.

// contents of format.ts

interface String {
  format(...args: any[]): string;
}

if (!String.prototype.format) {
  String.prototype.format = function() {
    let a = this;
    let b: any;
    // tslint:disable-next-line: forin
    for (b in arguments) {
      a = a.replace(/%[a-z]/, arguments[b]);
    }
    return a;
  };
}

Zum Formatieren der Zeichenfolge verwenden Sie diesen Code:

import './format';

console.log('Hello, %s!'.format('World'));

Beispiel

String.prototype.format = function() {
  let a = this;
  let b;
  for (b in arguments) {
    a = a.replace(/%[a-z]/, arguments[b]);
  }
  return a;
};

console.log('Hello, %s!'.format('World'));

0voto

moechofe Punkte 91

Diese funktioniert mit {0}, {1} und {}.

String.prototype.format = function format()
{                                                                                                               
  var msg = this;
  for(var i in arguments)
    msg = msg.replace(/\{\}/,arguments[i]).replace(new RegExp('\\{'+i+'\\}','g'),arguments[i]);
  return msg;
}

0voto

Nero Punkte 1415

Wenn Sie nur eine Zeichenkette formatieren müssen mit %s-Bezeichner nur

function _sprintf(message){
    const regexp = RegExp('%s','g');
    let match;
    let index = 1;
    while((match = regexp.exec(message)) !== null) {
        let replacement = arguments[index];
        if (replacement) {
            let messageToArray = message.split('');
            messageToArray.splice(match.index, regexp.lastIndex - match.index, replacement);
            message = messageToArray.join('');
            index++;
        } else {
            break;
        }
    }

    return message;
}

_sprintf("my name is %s, my age is %s", "bob", 50); // my name is bob, my age is 50

0voto

Alex Povolotsky Punkte 318

Wenn Sie ein printf benötigen, verwenden Sie printf

Es sieht so aus, als hätten 90% der Kommentatoren noch nie printf mit einem komplexeren Format als nur %d verwendet. Ich frage mich, wie sie z. B. Geldwerte ausgeben?

0voto

Momentan gibt es ein Paket namens locutus die die Funktionen anderer Sprachen wie php, python, ruby usw. in Javascript übersetzen.

const printf = require('locutus/php/strings/printf')
printf('Hello world');

Sie können diesen Spielplatz ausprobieren codesandbox

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