s = 'hello %s, how are you doing' % (my_name)
Đó là cách bạn làm điều đó trong python. Làm thế nào bạn có thể làm điều đó trong javascript / node.js?
s = 'hello %s, how are you doing' % (my_name)
Đó là cách bạn làm điều đó trong python. Làm thế nào bạn có thể làm điều đó trong javascript / node.js?
Câu trả lời:
Nếu bạn muốn có một cái gì đó tương tự, bạn có thể tạo một hàm:
function parse(str) {
var args = [].slice.call(arguments, 1),
i = 0;
return str.replace(/%s/g, () => args[i++]);
}
Sử dụng:
s = parse('hello %s, how are you doing', my_name);
Đây chỉ là một ví dụ đơn giản và không tính đến các loại dữ liệu khác nhau (như %i
, v.v.) hoặc thoát %s
. Nhưng tôi hy vọng nó cung cấp cho bạn một số ý tưởng. Tôi khá chắc chắn rằng cũng có những thư viện ngoài đó cung cấp một chức năng như thế này.
Với Node.js v4
, bạn có thể sử dụng chuỗi Mẫu của ES6
var my_name = 'John';
var s = `hello ${my_name}, how are you doing`;
console.log(s); // prints hello John, how are you doing
Bạn cần phải quấn chuỗi trong backtick `
thay vì'
hello ${my_name}, how are you doing
và tôi muốn gán biến động sau khi đọc chuỗi từ cấu hình?
nếu bạn đang sử dụng ES6, bạn nên sử dụng các mẫu bằng chữ.
//you can do this
let sentence = `My name is ${ user.name }. Nice to meet you.`
đọc thêm tại đây: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
Vì node.js
>4.0
nó tương thích hơn với tiêu chuẩn ES6, trong đó thao tác chuỗi được cải thiện đáng kể.
Câu trả lời cho câu hỏi ban đầu có thể đơn giản như:
var s = `hello ${my_name}, how are you doing`;
// note: tilt ` instead of single quote '
Trường hợp chuỗi có thể trải rộng nhiều dòng, nó làm cho các mẫu hoặc các quy trình HTML / XML khá dễ dàng. Thêm chi tiết và nhiều capabilitie về nó: Mẫu chữ là chuỗi ký tự tại mozilla.org.
hồn.format làm điều này.
Nó sẽ là một phần của v0.5.3 và có thể được sử dụng như thế này:
var uri = util.format('http%s://%s%s',
(useSSL?'s':''), apiBase, path||'/');
Làm việc đó đi:
s = 'hello ' + my_name + ', how are you doing'
Với ES6, bạn cũng có thể làm điều này:
s = `hello ${my_name}, how are you doing`
Một vài cách để mở rộng String.prototype
hoặc sử dụng mẫu chữ 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>
Hãy thử sprintf trong JS hoặc bạn có thể sử dụng ý chính này
Nếu bạn đang sử dụng node.js, console.log () lấy chuỗi định dạng làm tham số đầu tiên:
console.log('count: %d', count);
console.log()
chỉ xuất ra chuỗi được định dạng thành STDOUT
. Nói cách khác, bạn không thể sử dụng kết quả củacount: %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)
Tôi đã viết một chức năng giải quyết vấn đề chính xác.
Đối số đầu tiên là chuỗi muốn được tham số hóa. Bạn nên đặt các biến của mình trong chuỗi này như định dạng này "% s1,% s2, ...% s12" .
Các đối số khác là các tham số tương ứng cho chuỗi đó.
/***
* @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];
});
}
Ví dụ
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"
Nếu vị trí biến thay đổi trong chuỗi đó, hàm này cũng hỗ trợ nó mà không thay đổi các tham số hàm.
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';
Dưới đây là một ví dụ về chuỗi ký tự chuỗi nhiều dòng trong 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';