s = 'hello %s, how are you doing' % (my_name)
Begitulah cara Anda melakukannya dengan python. Bagaimana Anda bisa melakukannya di javascript / node.js?
javascript
string
node.js
TIMEX
sumber
sumber
var s = 'hello ${my_name}, how are you doing';
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.sumber
Dengan Node.js
v4
, Anda dapat menggunakan string Template ES6var 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'
sumber
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
sumber
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.
sumber
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||'/');
sumber
Lakukan itu:
s = 'hello ' + my_name + ', how are you doing'
Memperbarui
Dengan ES6, Anda juga bisa melakukan ini:
s = `hello ${my_name}, how are you doing`
sumber
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>
sumber
Coba sprintf di JS atau Anda bisa menggunakan intinya
sumber
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."
sumber
Jika Anda menggunakan node.js, console.log () menggunakan string format sebagai parameter pertama:
console.log('count: %d', count);
sumber
console.log()
hanya mengeluarkan string yang diformat keSTDOUT
. 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)
sumber
var user = "your name"; var s = 'hello ' + user + ', how are you doing';
sumber
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 >
sumber