s = 'bonjour %s, comment vas-tu' % (mon_nom)
C'est ainsi que vous le faites en python. Comment pouvez-vous le faire en javascript/node.js ?
s = 'bonjour %s, comment vas-tu' % (mon_nom)
C'est ainsi que vous le faites en python. Comment pouvez-vous le faire en javascript/node.js ?
J'ai écrit une fonction qui résout le problème précisément.
Premier argument est la chaîne à paramétrer. Vous devez mettre vos variables dans cette chaîne sous ce format "%s1, %s2, ... %s12".
Autres arguments sont les paramètres respectivement pour cette chaîne.
/***
* @example parameterizedString("my name is %s1 and surname is %s2", "John", "Doe");
* @return "my name is John and surname is Doe"
*
* @firstArgument {String} like "my name is %s1 and surname is %s2"
* @otherArguments {String | Number}
* @returns {String}
*/
const parameterizedString = (...args) => {
const str = args[0];
const params = args.filter((arg, index) => index !== 0);
if (!str) return "";
return str.replace(/%s[0-9]+/g, matchedStr => {
const variableIndex = matchedStr.replace("%s", "") - 1;
return params[variableIndex];
});
}
Exemples
parameterizedString("my name is %s1 and surname is %s2", "John", "Doe");
// returns "my name is John and surname is Doe"
parameterizedString("this%s1 %s2 %s3", " method", "sooo", "goood");
// returns "this method sooo goood"
Si la position des variables change dans cette chaîne, cette fonction le supporte également sans changer les paramètres de la fonction.
parameterizedString("i have %s2 %s1 and %s4 %s3.", "livres", 5, "crayons", "6");
// returns "i have 5 livres and 6 crayons."
Quelques façons d'étendre String.prototype
, ou d'utiliser les littéraux de modèle ES2015.
var result = document.querySelector('#result');
// -----------------------------------------------------------------------------------
// Classique
String.prototype.format = String.prototype.format ||
function () {
var args = Array.prototype.slice.call(arguments);
var replacer = function (a){return args[a.substr(1)-1];};
return this.replace(/(\$\d+)/gm, replacer)
};
result.textContent =
'hello $1, $2'.format('[monde]', '[comment vas-tu?]');
// ES2015#1
'use strict'
String.prototype.format2 = String.prototype.format2 ||
function(...merge) { return this.replace(/\$\d+/g, r => merge[r.slice(1)-1]); };
result.textContent += '\nSalut $1, $2'.format2('[monsieur]', '[je vais bien, merci]');
// ES2015#2: littéral de modèle
var merge = ['[bien]', '[savoir]'];
result.textContent += `\nD'accord, ${merge[0]} à ${merge[1]}`;
Essayer sprintf en JS ou vous pourriez utiliser ce gist
Si vous utilisez node.js, console.log() prend une chaîne de format en tant que premier paramètre :
console.log('count: %d', count);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Je suis sûr qu'il y avait un épouvantail es-next quelque part pour faire
var s = 'hello ${my_name}, how are you doing';
1 votes
J'utilise comme l'a dit Raynos: `const poem = "La rivière noire"; const author = "Joseph Troll"; const favePoem = `Mon poème préféré est ${poem} de ${author}\`; Ou vous pouvez utiliser: console.log('%s est %d.', 'Onze', 11);
3 votes
La modélisation normale est disponible depuis des années maintenant MAIS VOUS DEVEZ UTILISER LES BACKTICKS stackoverflow.com/a/37245773/294884 stackoverflow.com/a/37245773/294884 stackoverflow.com/a/37245773/294884 stackoverflow.com/a/37245773/294884
1 votes
Si vous êtes bloqué avec le formatage
sprintf
, vous pouvez utiliserutil.format('hello %s, how are you doing', my_name)
qui fonctionne toujours en v14.15.4! voir la documentation nodejs.org/docs/latest/api/…