s = 'hello %s, how are you doing' % (my_name)
C'est comme ça que vous le faites en python. Comment pouvez-vous faire cela dans javascript/node.js?
Si vous voulez avoir quelque chose de similaire, vous pouvez créer une fonction:
function parse(str) {
var args = [].slice.call(arguments, 1),
i = 0;
return str.replace(/%s/g, () => args[i++]);
}
Usage:
s = parse('hello %s, how are you doing', my_name);
Ceci n'est qu'un exemple simple et ne prend pas en compte différents types de types de données (tels que %i
, etc.) ou l'échappement de %s
. Mais j'espère que cela vous donne une idée. Je suis presque sûr qu'il y a aussi des bibliothèques qui offrent une fonction comme celle-ci.
Avec Node.js v4
, vous pouvez utiliser les chaînes de modèle de ES6
var my_name = 'John';
var s = `hello ${my_name}, how are you doing`;
console.log(s); // prints hello John, how are you doing
Vous devez envelopper la chaîne dans backtick `
au lieu de '
util.format fait ceci.
Cela fera partie de v0.5.3 et peut être utilisé comme ceci:
var uri = util.format('http%s://%s%s',
(useSSL?'s':''), apiBase, path||'/');
À partir de node.js
>4.0
, il devient plus compatible avec le standard ES6, où la manipulation des chaînes est grandement améliorée.
La réponse à la question initiale peut être aussi simple que:
var s = `hello ${my_name}, how are you doing`;
// note: tilt ` instead of single quote '
Lorsque la chaîne peut étendre plusieurs lignes, les modèles ou les processus HTML/XML sont très faciles à utiliser. Plus de détails et plus de fonctionnalités à ce sujet: Les littéraux de modèle sont des littéraux de chaîne à mozilla.org.
si vous utilisez ES6, vous devez utiliser les littéraux de modèle.
//you can do this
let sentence = `My name is ${ user.name }. Nice to meet you.`
lire plus ici: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
Faire ça
s = 'hello ' + my_name + ', how are you doing'
Quelques façons d'étendre String.prototype
ou d'utiliser ES2015 template littals .
var result = document.querySelector('#result');
// -----------------------------------------------------------------------------------
// Classic
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('[world]', '[how are you?]');
// 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 += '\nHi there $1, $2'.format2('[sir]', '[I\'m fine, thnx]');
// ES2015#2: template literal
var merge = ['[good]', '[know]'];
result.textContent += `\nOk, ${merge[0]} to ${merge[1]}`;
<pre id="result"></pre>
Essayez sprintf dans JS ou vous pouvez utiliser ceci Gist
const format = (...args) => args.shift().replace(/%([jsd])/g, x => x === '%j' ? JSON.stringify(args.shift()) : args.shift())
const name = 'Csaba'
const formatted = format('Hi %s, today is %s and your data is %j', name, Date(), {data: {country: 'Hungary', city: 'Budapest'}})
console.log(formatted)
Si vous utilisez node.js, console.log () prend la chaîne de format comme premier paramètre:
console.log('count: %d', count);
J'ai écrit un fonction qui résout le problème avec précision.
Le premier argument est la chaîne à paramétrer. Vous devez placer vos variables dans cette chaîne comme ceci: "% s1,% s2, ...% s12" .
Les autres arguments sont les paramètres respectifs de 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 de la variable change dans cette chaîne, cette fonction la prend également en charge sans modifier les paramètres de la fonction.
parameterizedString("i have %s2 %s1 and %s4 %s3.", "books", 5, "pencils", "6");
// returns "i have 5 books and 6 pencils."
var user = "your name";
var s = 'hello ' + user + ', how are you doing';
Voici un exemple Multi-line String Literal dans Node.js.
> let name = 'Fred'
> tm = `Dear ${name},
... This is to inform you, ${name}, that you are
... IN VIOLATION of Penal Code 64.302-4.
... Surrender yourself IMMEDIATELY!
... THIS MEANS YOU, ${name}!!!
...
... `
'Dear Fred,\nThis is to inform you, Fred, that you are\nIN VIOLATION of Penal Code 64.302-4.\nSurrender yourself IMMEDIATELY!\nTHIS MEANS YOU, Fred!!!\n\n'
console.log(tm)
Dear Fred,
This is to inform you, Fred, that you are
IN VIOLATION of Penal Code 64.302-4.
Surrender yourself IMMEDIATELY!
THIS MEANS YOU, Fred!!!
undefined
>