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": "誠"
}