問題描述
我想要一個模仿 python .format() 函數的 javascript 函數
I would like a javascript function that mimics the python .format() function that works like
.format(*args, **kwargs)
上一個問題為 '.format(*args) 提供了一個可能(但不完整)的解決方案
A previous question gives a possible (but not complete) solution for '.format(*args)
JavaScript 等效于 printf/string.format
我希望能夠做到
"hello {} and {}".format("you", "bob"
==> hello you and bob
"hello {0} and {1}".format("you", "bob")
==> hello you and bob
"hello {0} and {1} and {a}".format("you", "bob",a="mary")
==> hello you and bob and mary
"hello {0} and {1} and {a} and {2}".format("you", "bob","jill",a="mary")
==> hello you and bob and mary and jill
我意識到這是一項艱巨的任務,但也許在某個地方有一個完整(或至少部分)的解決方案,其中也包括關鍵字參數.
I realize that's a tall order, but maybe somewhere out there is a complete (or at least partial) solution that includes keyword arguments as well.
哦,我聽說 AJAX 和 JQuery 可能有這方面的方法,但我希望能夠在沒有所有開銷的情況下做到這一點.
Oh, and I hear AJAX and JQuery possibly have methods for this, but I would like to be able to do it without all that overhead.
特別是,我希望能夠將它與 google doc 的腳本一起使用.
In particular, I would like to be able to use it with a script for a google doc.
謝謝
推薦答案
更新:如果您使用的是 ES6,模板字符串的工作方式與 String.format
非常相似:https://developers.google.com/web/updates/2015/01/ES6-Template-字符串
UPDATE: If you're using ES6, template strings work very similarly to String.format
: https://developers.google.com/web/updates/2015/01/ES6-Template-Strings
如果不是,以下適用于上述所有情況,其語法與 python 的 String.format
方法非常相似.下面是測試用例.
If not, the below works for all the cases above, with a very similar syntax to python's String.format
method. Test cases below.
String.prototype.format = function() {
var args = arguments;
this.unkeyed_index = 0;
return this.replace(/{(w*)}/g, function(match, key) {
if (key === '') {
key = this.unkeyed_index;
this.unkeyed_index++
}
if (key == +key) {
return args[key] !== 'undefined'
? args[key]
: match;
} else {
for (var i = 0; i < args.length; i++) {
if (typeof args[i] === 'object' && typeof args[i][key] !== 'undefined') {
return args[i][key];
}
}
return match;
}
}.bind(this));
};
// Run some tests
$('#tests')
.append(
"hello {} and {}<br />".format("you", "bob")
)
.append(
"hello {0} and {1}<br />".format("you", "bob")
)
.append(
"hello {0} and {1} and {a}<br />".format("you", "bob", {a:"mary"})
)
.append(
"hello {0} and {1} and {a} and {2}<br />".format("you", "bob", "jill", {a:"mary"})
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tests"></div>
這篇關于Javascript 等價于 python 的 .format()的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!