JavaScriptでString.Format

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(言語?)にまとめました。

Profile

Yoshifumi Kawai

Cysharp, Inc
CEO/CTO

Microsoft MVP for Developer Technologies(C#)
April 2011
|
July 2024

Twitter:@neuecc GitHub:neuecc

Archive