Existe-t-il un équivalent JavaScript à printf() en PHP et String.Format() en Java ?

Le langage JavaScript ne fournit pas de méthode pour formater une chaîne de caractères et y insérer le contenu de variables. Mais il est possible de créer la sienne ou de faire appel à des librairies externes.

De nombreux langages possèdent des méthodes permettant de formater une chaîne de caractères pour y insérer le contenu de variables. C'est le cas par exemple du langage PHP avec la fonction sprintf() ou des langages C# et Java avec la fonction String.Format(). Le langage JavaScript ne fournit pas par défaut de méthode semblable mais il est possible de créer la sienne ou de faire appel à des librairies externes.

Pour réaliser cette opération, il faut créer une fonction qui récupère la liste des arguments. C'est possible en JavaScript avec le mot-clé arguments. La fonction va utiliser une expression régulière pour récupérer tous les chiffres entre accolades. Elle va ensuite vérifier si le chiffre a un argument correspondant. Si c'est le cas, le remplacement sera fait. Il existe deux possibilités pour implémenter cette fonction : la méthode String.prototype.format() va permettre d'appeler directement cette méthode à partir de la chaîne alors que la méthode String.format() va permettre d'obtenir la même écriture qu'en Java.

//On vérifie d'abord que la méthode n'existe pas déjà.
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
;
});
};
}
//Utilisation
alert("Coucou {0}, comment va {1} ? {2}").format("Paul", "Georges"));
Résultat : "Coucou Paul, comment va Georges ? {2}" 
if (!String.format) {
String.format = function(format) {
//On enlève le premier argument car il s'agit de la chaîne dans laquelle remplacer les valeurs
var args = Array.prototype.slice.call(arguments, 1);
return format.replace(/{(d+)}/g, function(match, number) { 
return typeof args[number] != 'undefined'
? args[number] 
: match
;
});
};
}
//Utilisation
alert(String.format("Coucou {0}, comment va {1} ? {2}", "Paul", "Georges"));
Résultat : "Coucou Paul, comment va Georges ? {2}"

Une autre solution consiste à utiliser des librairies externes. La librairie sprintf.js ajoute la fonction sprintf dans votre code : https://github.com/alexei/sprintf.js.

PHP