Avatar ·

Formatage de chaînes en JavaScript : équivalent de printf ou String.Format

Réponse courte

En JavaScript, il n'y a pas de fonction intégrée comme sprintf ou String.Format dans le langage lui-même. La façon standard de formater des chaînes est d'utiliser les template literals (littéraux de gabarit) avec les backticks (`` ` ``) :

let result = `Bonjour, ${name} ! Vous avez ${count} nouveaux messages.`;

Alternatives disponibles

Si vous avez vraiment besoin d'une fonction de type sprintf, vous pouvez utiliser :

  • Bibliothèque tierce : sprintf-js (très légère)
  • Node.js : util.format() (intégré dans Node.js, mais pas dans le navigateur)
  • Implémentation personnalisée simple avec String.prototype.replace()

Exemples de code

Avec sprintf-js :

// npm install sprintf-js
const sprintf = require('sprintf-js').sprintf;

let result = sprintf("Bonjour, %s ! Vous avez %d nouveaux messages.", name, count);

Avec util.format (Node.js) :

const util = require('util');
let result = util.format("Bonjour, %s ! Vous avez %d nouveaux messages.", name, count);

Implémentation maison simple :

function formatString(template, ...args) {
    return template.replace(/{(\d+)}/g, (match, index) => {
        return typeof args[index] !== 'undefined' ? args[index] : match;
    });
}

let result = formatString("Bonjour, {0} ! Vous avez {1} nouveaux messages.", name, count);

Conclusion

Pour un nouveau projet, je recommande d'utiliser les template literals : ils sont natifs, lisibles et fonctionnent partout. Les fonctions de type sprintf sont surtout utiles si vous portez du code depuis d'autres langages ou si vous avez besoin de formatage avancé (précision des nombres, padding, etc.).