VBAやJavaScriptなどの置換関数の引数の違い

VBAやJavaScriptなどには文字列を置換するための関数があります。
「これはペンです」の「ペン」を「鉛筆」に置換して「これは鉛筆です」に変換するようなケースで使います。

言語によって微妙に書き方が異なるので注意を要します。
私がよく使う、Excel、VBA、JavaScript、PHP、MySQLについて、比較してみました。

言語 関数
Excel SUBSTITUTE(文字列,置換前,置換後)
VBA Replace(文字列,置換前,置換後)
JavaScript 文字列.replace(置換前,置換後)※正規表現が使える。
PHP str_replace(置換前,置換後,文字列)または
preg_replace(置換前,置換後,文字列)※正規表現が使える。
MySQL REPLACE(文字列,置換前,置換後)

言葉の意味は次の通りです。
文字列「これはペンです」置換前「ペン」置換後「鉛筆」に置換

正規表現で「肯定先読み」を使う

JavaScriptを使って、次の作業をしたいと思います。

文字列の中の「a」と「a」に挟まれた「b」を「z」に置換する。

「abababa」という文字列ならば「azazaza」となるようにします。 (さらに…)

MySQLで文字を一括置換する方法

MySQLで特定の文字列を一括置換する方法は次の通りです。

UPDATE テーブル SET カラム = REPLACE(カラム,置換前文字列,置換後文字列);

例えば、テーブル「予定表」のカラム「場所」の「○○教室」を「○○会議室」に一括置換したい場合には次のようにします。

UPDATE 予定表 SET 場所 = REPLACE(場所,"教室","会議室");

(さらに…)

JavaScriptのreplaceで置換後の文字列に関数を使う

JavaScriptでreplaceを使うとき、置換後の文字列に関数を指定できますが、そのときの動きについて調べてみました。

例1

moto = "123×456";
saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($0, $1, $2, $3) {
    return "(0)" + $0 + "(1)" + $1 + "(2)" + $2 + "(3)" + $3;
});
document.write(saki);

【結果】(0)123×456(1)123(2)×(3)456

例2

saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($1, $2, $3, $4) {
    return "(1)" + $1 + "(2)" + $2 + "(3)" + $3 + "(4)" + $4;
});

【結果】(1)123×456(2)123(3)×(4)456

例3

saki = moto.replace(/(\d*)(\D*)(\d*)/, function ($4, $3, $2, $1) {
    return "(1)" + $1 + "(2)" + $2 + "(3)" + $3 + "(4)" + $4;
});

【結果】(1)456(2)×(3)123(4)123×456

$0、$1などを使って置換後の文字列を表現しますが、$0や$1に何がセットされるかはfunctionの引数の場所によってきまるだけで、$nが何かは関係ないようです。

replace(/(☆)(★)(◆)/, function (全体,,,) {
    return 戻り値;
});

「全体」は使わないことがあるのですが、必然的に取得されてしまうようです。となると、例1のような書き方が分かりやすいかもしれません。この場合、PHPのpreg_replaceに似た動きをします。

新しい記事

タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報