JavaScript で format


Lisp の format のようなものが欲しいと思って作りました。かなりいい加減ですけど、役に立ちます。

String.prototype.format = function () {
var s = this;
var args = arguments;
var len = arguments.length;
var i = 0;
s.match(/~[a%~]/g).forEach(function (p) {
var v = ”;
switch (p[1]) {
case ‘a’: if (i < len) v = args[i++]; break;
case '%': v = 'n'; break;
case '~': v = '~'; break;
default: v = p[1];
}
s = s.replace(p, v);
});
return s;
};

これだけです。さっきの JSON.stringify する toString と組み合わせれば、オブジェクトも埋め込まれます。

'~a + ~a = ~a'.format(15, 20, 15 + 20);

に対しては、以下のように

15 + 20 = 35

var i = { i: '愛' };
var m = { m: '誠' };
'~aと~a'.format(i, m);

の場合は、以下のような出力が得られます。

{
"i": "愛"
}と{
"m": "誠"
}