252 votes

Comment mettre des variables à l'intérieur des chaînes de caractères Javascript?

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 ?

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

25voto

KodeFor.Me Points 11719

Faites ceci:

s = 'hello ' + my_name + ', how are you doing'

Mettre à jour

Avec ES6, vous pourriez aussi faire ceci:

s = `hello ${my_name}, how are you doing`

7voto

fatihturgut Points 94

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."

5voto

KooiInc Points 38845

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]}`;

4voto

spicavigo Points 3858

Essayer sprintf en JS ou vous pourriez utiliser ce gist

4voto

Andrey Sidorov Points 9287

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.com

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.

Powered by:

X