s = 'hello %s, how are you doing' % (my_name)
So machst du es in Python. Wie können Sie das in javascript / node.js tun?
s = 'hello %s, how are you doing' % (my_name)
So machst du es in Python. Wie können Sie das in javascript / node.js tun?
Antworten:
Wenn Sie etwas Ähnliches haben möchten, können Sie eine Funktion erstellen:
function parse(str) {
var args = [].slice.call(arguments, 1),
i = 0;
return str.replace(/%s/g, () => args[i++]);
}
Verwendung:
s = parse('hello %s, how are you doing', my_name);
Dies ist nur ein einfaches Beispiel und berücksichtigt nicht verschiedene Arten von Datentypen (wie %i
usw.) oder das Entkommen von %s
. Aber ich hoffe, es gibt Ihnen eine Idee. Ich bin mir ziemlich sicher, dass es auch Bibliotheken gibt, die eine solche Funktion bieten.
Mit Node.js v4
können Sie die Vorlagenzeichenfolgen von ES6 verwenden
var my_name = 'John';
var s = `hello ${my_name}, how are you doing`;
console.log(s); // prints hello John, how are you doing
Sie müssen den String `
stattdessen in den Backtick einschließen'
hello ${my_name}, how are you doing
und ich nach dem Lesen der Zeichenfolge aus der Konfiguration eine Variable dynamisch zuweisen möchte?
Wenn Sie ES6 verwenden, sollten Sie die Vorlagenliterale verwenden.
//you can do this
let sentence = `My name is ${ user.name }. Nice to meet you.`
Lesen Sie hier mehr: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
Ab node.js
>4.0
sofort wird es kompatibler mit dem ES6-Standard, bei dem die String-Manipulation erheblich verbessert wurde.
Die Antwort auf die ursprüngliche Frage kann so einfach sein wie:
var s = `hello ${my_name}, how are you doing`;
// note: tilt ` instead of single quote '
Wenn die Zeichenfolge mehrere Zeilen umfassen kann, sind Vorlagen oder HTML / XML-Prozesse recht einfach. Weitere Details und mehr Möglichkeiten dazu: Vorlagenliterale sind Stringliterale bei mozilla.org.
util.format macht das.
Es wird Teil von v0.5.3 sein und kann folgendermaßen verwendet werden:
var uri = util.format('http%s://%s%s',
(useSSL?'s':''), apiBase, path||'/');
TU das:
s = 'hello ' + my_name + ', how are you doing'
Mit ES6 können Sie auch Folgendes tun:
s = `hello ${my_name}, how are you doing`
Einige Möglichkeiten zum Erweitern String.prototype
oder Verwenden von ES2015- Vorlagenliteralen .
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>
Versuchen Sie sprintf in JS oder verwenden Sie dieses Wesentliche
Wenn Sie node.js verwenden, verwendet console.log () die Formatzeichenfolge als ersten Parameter:
console.log('count: %d', count);
console.log()
gibt nur die formatierte Zeichenfolge an aus STDOUT
. Mit anderen Worten, Sie können das Ergebnis voncount: %d
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)
Ich habe eine Funktion geschrieben, die das Problem genau löst.
Das erste Argument ist die Zeichenfolge, die parametrisiert werden wollte. Sie sollten Ihre Variablen in diese Zeichenfolge wie das folgende Format "% s1,% s2, ...% s12" einfügen .
Andere Argumente sind jeweils die Parameter für diese Zeichenfolge.
/***
* @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];
});
}
Beispiele
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"
Wenn sich die variable Position in dieser Zeichenfolge ändert, wird sie auch von dieser Funktion unterstützt, ohne die Funktionsparameter zu ändern.
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';
Hier ist ein mehrzeiliges String-Literal- Beispiel in 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
>
var s = 'hello ${my_name}, how are you doing';