JavaScript の String クラスを拡張して文字列を一括置換する

コーディング中に、(@tell_kみたいに) ついカッとなって、
JavaScript の Stringクラスを拡張してしまった。
引数に、文字列だけでなく配列や連想配列を渡せます。

/**
 * 文字列を一括置換します。
 *
 * @example
 * >>> "Hello World!!".replaceAll("o", "x")
 * "Hellx Wxrld!!"
 *
 * >>> "%s: %s (by %s)".replaceAll("%s", ["2012/03/03", "こんにちは世界!", "ryuzi"])
 * "2012/03/03: こんにちは世界! (by ryuzi)"
 *
 * >>> var data = {$date: "2012/03/03", $msg: "こんにちは世界!", $user: "ryuzi"};
 * >>> "$date: $msg (by $user)".replaceAll(data)
 * "2012/03/03: こんにちは世界! (by ryuzi)"
 */
String.prototype.replaceAll = function() {
    if (arguments.length == 2) {
        var src = arguments[0];
        var dist = arguments[1];
        if (typeof src == "string") {
            if (typeof dist == "string") {
                return this.split(src).join(dist);
            } else if (typeof dist == "object" && typeof dist.length == "number") {
                var result = this;
                for (var i=0; i<= dist.length; i++)
                    result = result.replace(src, dist[i]);
                return result;
            }
        }
    } else if (arguments.length == 1) {
        var dist = arguments[0];
        if (typeof dist == "object") {
            if (typeof dist.length == "undefined") {
                var result = this;
                for (key in dist)
                    result = result.replace(key, dist[key]);
                return result;
            }
        }
    }
    return Error("replaceAll の引数指定が正しくありません");
};
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中