Gibt es ein Sprintf-Äquivalent für node.js?

70

Ich wollte eine Ausgabeformatierung (Sprintf-Typ-Funktionalität) in node.js durchführen, aber bevor ich sie selbst schreibe, habe ich mich gefragt, ob etwas Ähnliches eingebaut ist (ich habe die Dokumente ohne Erfolg durchsucht) oder ob jemand bereits ein Modul geschrieben hat.

Danke vielmals

Steven Mohapi-Banks
quelle
Ich würde vorschlagen, auch diesen SO-Thread anzuschauen.
Husky
Ich habe seitdem eine schnelle und
spezifikationskonforme

Antworten:

72

Es gibt jetzt printfähnliche Unterstützung in util.format().

Beispiel:

util.format('hello %s', 'world');
// Returns: 'hello world'
Lapo
quelle
70
Außerdem ist die Unterstützung in util.formatsehr, sehr einfach: nein %5doder so %5.3fetwas, daher ist es sprintfleider keine echte Lösung.
Lapo
3
Ähnlich wie bei @Elliot Fosters Kommentar können Sie dies auch tun var printf = require('util').format.
Ian Oxley
1
@ Lapo Gleitkommazahl kann mit toFixed () var a = 1.234567;a.toFixed(3)=>>'1.235'
Etienne
4
es ist nutzlos, es ist überhaupt nicht printf-artig
Pavel P
2
Das Erzwingen von Zahlen in Zeichenfolgendarstellungen mit fester Breite, möglicherweise mit 0-Auffüllung, ist ein Hauptanwendungsfall für Drucke. util.formatunterstützt das (zB require('util').format("blarf_%04d", 42);) ab Version 10.5.0 nicht.
Kollapsar
27

Es gibt einige in der npm-Registrierung, die tatsächliche sprintfImplementierungen sind, da util.formatsie nur eine sehr grundlegende Unterstützung haben.

KARASZI István
quelle
Leider ist sprintf-js nicht mit Farben kompatibel:sprintf(" %s %s", title.grey, colors['blue'](msg)) ' \x1B[90mTitle\x1B[39m \x1B[34mMessage\x1B[39m'
Scavenger
5

console.log funktioniert gut.

console.log('%d hours', 4); // 4 hours
console.log('The %2$s contains %1$d monkeys', 4, 'tree'); // The tree contains 4 monkeys
Jürgen Paul
quelle
4
Das erste Beispiel funktioniert auf Knoten 0.10.18, das zweite schlägt jedoch vollständig fehl: Die 2 $ / 1 $ müssen entfernt werden, um die Parameterinterpolation tatsächlich zu erhalten, und dann müssen die Parameter in der richtigen Reihenfolge sein, andernfalls erhalten Sie: console.log ('Das% s enthält% d Affen', 4, 'Baum'); Rückkehr: Die 4 enthält NaN-Affen `` `
FGM
Das zweite Beispiel funktioniert in der Chrome-Konsole (v33). Funktioniert gemäß @FGM console.log('The %s contains %d monkeys', 'tree', 4);in Knoten v0.10.26.
Joemaller
2
nützlicher Tipp (wenn es funktioniert), aber es ist äquivalent zu printf, nicht sprintf.
Alnitak
1
Ich bin mir nicht sicher, warum es auf Node v9.4 nicht funktioniert. Verwenden Sie einfach`es6 template ${format}`
Ray Foss