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


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'

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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.