s = 'hello %s, how are you doing' % (my_name)
Begitulah cara Anda melakukannya dengan python. Bagaimana Anda bisa melakukannya di javascript / node.js?
s = 'hello %s, how are you doing' % (my_name)
Begitulah cara Anda melakukannya dengan python. Bagaimana Anda bisa melakukannya di javascript / node.js?
Jawaban:
Perhatikan, mulai 2015 dan seterusnya, cukup gunakan backticks untuk membuat template
https://stackoverflow.com/a/37245773/294884
let a = `hello ${name}` // NOTE!!!!!!!! ` not ' or "
Perhatikan bahwa ini adalah backtick , bukan kutipan.
Jika Anda ingin memiliki sesuatu yang serupa, Anda dapat membuat sebuah fungsi:
function parse(str) {
var args = [].slice.call(arguments, 1),
i = 0;
return str.replace(/%s/g, () => args[i++]);
}
Pemakaian:
s = parse('hello %s, how are you doing', my_name);
Ini hanyalah contoh sederhana dan tidak memperhitungkan berbagai jenis tipe data (seperti %i
, dll) atau pelolosan %s
. Tapi saya harap ini memberi Anda beberapa ide. Saya cukup yakin ada juga perpustakaan di luar sana yang menyediakan fungsi seperti ini.
Dengan Node.js v4
, Anda dapat menggunakan string Template ES6
var my_name = 'John';
var s = `hello ${my_name}, how are you doing`;
console.log(s); // prints hello John, how are you doing
Anda perlu membungkus string dengan backtick, `
bukan'
hello ${my_name}, how are you doing
dan saya ingin menetapkan variabel secara dinamis setelah membaca string dari config?
jika Anda menggunakan ES6, Anda harus menggunakan literal Template.
//you can do this
let sentence = `My name is ${ user.name }. Nice to meet you.`
baca lebih lanjut di sini: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
Sejak node.js
>4.0
itu menjadi lebih kompatibel dengan standar ES6, di mana manipulasi string meningkat pesat.
The jawaban untuk pertanyaan asli dapat sesederhana:
var s = `hello ${my_name}, how are you doing`;
// note: tilt ` instead of single quote '
Di mana string bisa menyebarkan banyak baris, itu membuat template atau proses HTML / XML cukup mudah. Lebih detil dan kemampuan lebih tentang itu: Literal template adalah literal string di mozilla.org.
util.format melakukan ini.
Ini akan menjadi bagian dari v0.5.3 dan dapat digunakan seperti ini:
var uri = util.format('http%s://%s%s',
(useSSL?'s':''), apiBase, path||'/');
Lakukan itu:
s = 'hello ' + my_name + ', how are you doing'
Dengan ES6, Anda juga bisa melakukan ini:
s = `hello ${my_name}, how are you doing`
Beberapa cara untuk memperluas String.prototype
, atau menggunakan literal template ES2015 .
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>
Coba sprintf di JS atau Anda bisa menggunakan intinya
Saya menulis fungsi yang memecahkan masalah dengan tepat.
Argumen pertama adalah string yang ingin dijadikan parameter. Anda harus meletakkan variabel Anda dalam string ini seperti format ini "% s1,% s2, ...% s12" .
Argumen lain adalah parameter masing-masing untuk string itu.
/***
* @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];
});
}
Contoh
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"
Jika posisi variabel berubah dalam string itu, fungsi ini mendukungnya juga tanpa mengubah parameter fungsi.
parameterizedString("i have %s2 %s1 and %s4 %s3.", "books", 5, "pencils", "6");
// returns "i have 5 books and 6 pencils."
Jika Anda menggunakan node.js, console.log () menggunakan string format sebagai parameter pertama:
console.log('count: %d', count);
console.log()
hanya mengeluarkan string yang diformat ke STDOUT
. Dengan kata lain, Anda tidak dapat menggunakan hasil daricount: %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)
var user = "your name";
var s = 'hello ' + user + ', how are you doing';
Berikut adalah contoh Literal String Multi-baris di 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';