JavaScriptでString.Format
- 2009-04-28
function Format(format /*,obj1,obj2...*/)
{
// 置換文字に対応する配列
var dict = E.From(arguments).Skip(1).ToArray();
// 正規表現用の文字列( {(0|1|2)} )
var str = "\\{(" + E.Range(0, dict.length).ToString("|") + ")\\}";
var regex = new RegExp(str, "g");
return format.replace(regex, function(m, c) { return dict[c] });
}
var result = Format("食べ物は{0}で飲み物は{1}だそうです。", "タコ焼き", "コーラ");
document.write(result); // 食べ物はタコ焼きで飲み物はコーラだそうです。
(C#の)String.Formatは便利!お手軽!JavaScriptでも使いたい!ていうかprototype.jsのTemplateは書き方がヘヴィすぎだしね!というわけでサクサクッとその場使い捨てなフォーマット記述関数を、linq.jsを使って(←ここ重要)作りました。
やってることはごくごく単純で、正規表現でガッと置換するだけです。その正規表現を生成するのにlinq.jsが役立ち……ってほど役立ってないというかあんまし使ってませんね。別に決め打ちで数字だけマッチさせるのなら、余計な手間もループして結合もいらないし。うわ……。
function Format(format /*,obj1,obj2...*/)
{
var args = arguments;
return format.replace(/\{(\d)\}/g, function(m, c) { return args[parseInt(c) + 1] });
}
はいはい。別に使わなくてもたった二行でしたねすみませんすみません。次はもっとマシな例を考えてきます。最近脳みそがゆるふわ化しててほんとすみませんすみません。
追記:私の制作しているライブラリlinq.jsのアドオンという形で、機能強化したフォーマット用のコードを置いてありますので良ければそちらも参照ください。linq.jsと周辺については最もタメになる「初心者用言語」はVisualStudio(言語?)にまとめました。