GASのRaplaceメソッドで文字置換

はじめに

GAS(Google Apps Script)を使っていて、文字列を置換させる処理を組み込みこみたい場面はよくあります。GASでは文字列を置換するためのRepalceメソッドがあります。これを使ってテキスト形式のデータやCSVなど様々な形式のデータの中の文字列を置換させることができます。本記事ではGASのReplaceメソッドの使い方を紹介していきます。Replaceメソッドで文字列を置換したい場合、必ず正規表現を使う場面がありますので、簡単ではありますが、よく使う正規表現に関しても紹介します。

Replaceメソッドの使い方

前準備

Replaceメソッドをさっそく使っていきましょう。
まず、GASで新規プロジェクトを立ち上げます。
以下、手順に沿ってやってみてください。


1.Google Driveにログインする
2.左の上の「新規」を押下
3.「その他」から「Google Apps Script」を選択する

以下のようにGASのスクリプトが開かれます。

[コード]
function myFunction() {

}

myFunctionの波括弧にコードを記述していきます。

基本の使い方

では、Replaceの基本的な使い方を見ていきましょう。
書き方は以下になります。

変数.replace("検索パターン","置換後文字列")

さっそく文字を置換して行きましょう。
以下のようにコードを記述してください。

[コード]
function myFunction() {
var char = "ABCDABCD";
str = char.replace("A", "Z");
console.log(str);
}



[ログ]
[20-10-09 13:44:29:081 JST] ZBCDABCD

上記例では、文字列の中からAをZに変換しようとしています。
ここで注意したいのですが、デフォルトだと最初に検索がヒットした文字しか置換してくれません。複数個存在する文字を置換してあげる場合どうしたら良いでしょうか?
そういう場合には正規表現を使用します。
書き方は以下になります。

変数.replace(/正規表現/オプション","置換後文字列")

注意しておきたいのは、正規表現を記述する場合は”/”(スラッシュ)で囲んであげる必要があります。
実際にコードを叩いてみましょう。

[コード]
function myFunction() {
var char = "ABCDabcd";
str = char.replace(/A/gi, "Z");
console.log(str);
}


[ログ]
[20-10-09 13:59:24:256 JST] ZBCDZbcd

先程と同様に文字列の中からAに合致するものをZに置換しました。また今回はオプションである、gとiを指定しました。gは対象文字列から複数一致させたい場合に使います。iは大文字と小文字の区別をしません。
正規表現にgオプション、iオプションを付け加えることで、最初の大文字のAと5番目の小文字のaが一致し、Zに置換されました。他にも正規表現を使ったReplaceメソッドを試してみましょう。

正規表現を使ったReplace(メタ文字)

メタ文字とは正規表現の中で特殊なふるまいをする特殊文字です。非常に良く使われるものを紹介します。
まずは、以下のコードを打ってみましょう。

[コード]
function myFunction() {
var char = "ABCABCABC";
str = char.replace(/A.*?C/g,"0");
console.log(str);
}


[ログ]
[20-10-09 15:27:43:545 JST] 000

解説すると、

Aから始まり、任意の文字を0個から複数個挟み、Cで終わる文字列、で最短のもの

という意味になります。”最短のもの”と言いましたが、Aから始まりCで終わるものは、”ABC”になります。
ABCは文字列中に3つ存在していますので、それらがそれぞれRepalceされ、「000」となりました。
以下良く使うメタ文字ですので、是非覚えてください。

.(ドット)  : 任意の一文字(改行以外)
*(アスタリスク)     : 直前の文字の0回以上の繰り返し
?(クエッションマーク)  : 最短一致

となります。

もし?(クエッションマーク)を付けない場合、最長一致させます。
最短のものや最長のものと言っても実際イメージしにくいですので、以下のコードと結果を
最短一致のものと比べてみてください。

[コード]
function myFunction() {
var char = "ABCABCABC";
str = char.replace(/A.*C/g,"0");
console.log(str);
}


[ログ]
[20-10-09 15:41:00:353 JST] 0

今回の結果は0が一個になってしまいました。
何が起こったかと言うと、

Aから始まり、任意の文字を0個から複数個挟み、Cで終わる文字列、で最長のもの

を取得した結果となります。Aから始まりCで終わる最長のものは、”ABCABCABC”になります。

正規表現を使ったReplace(グループ)

次にグループを見ていきましょう。GASのReplaceメソッドでグループを使えば、正規表現で取得した値を記憶させて使用することができます。以下コードを書いてみましょう。

[コード]
function myFunction() {
var char = "080-0000-1111";
  str = char.replace(/(\d{3})-(\d{4})-(\d{4})/g,'$2 $1 $3');
console.log(str);
}


[ログ]
[20-10-09 15:51:29:400 JST] 0000 080 1111

使った文字列は携帯番号を想定しました。
やや複雑な正規表現になりますが、意外と単純です。

\d(バックスラッシュディー): 数字一文字を表します。[0-9]としても0~9の数字を表せます。
{}(波括弧) : 桁数を表します。数字を表すメタ文字とセットにします。
()(括弧) : 文字列をグループ化させます。

グループ化は文字をセットにしておくイメージです。例えば「じゃじゃじゃじゃーん」という文字列があった場合、(/(じゃ)+/)と正規表現を指定させると、「じゃじゃじゃじゃ」までを取得してあげることができます。
一般的にはこうした文字列の繰り返しを検索する場合が多いですが、GASやJavaScriptではグループ化で一致した文字列を記憶させ、$(ドルマーク)を使って操作することができます。
今回の正規表現を説明すると、
最初のグループは(\d{3})になります。
これに一致するのが”080″となり、$1に格納されます。
二つ目の(\d{4})は、2番目の”0000″に一致しますので、$2に格納されます。
今回は$2を最初に持ってきていますので、結果は、0000が最初にきます。

正規表現を使ったReplace(その他)

またGASのReplaceメソッドでは”$&”を使って、文字列を操作することが可能です。以下を見てください。

[コード]
function myFunction() {
var char = "a,b,c";
str = char.replace(/a|b|c/g,"<'$&'>");
console.log(str);
}


[ログ]
[20-10-09 17:20:34:821 JST] <'a'>,<'b'>,<'c'>

変換後の文字列に<$&>を入れてあげることで、a又はb又はcに一致した値に、それぞれ<”>を付与することができました。以下は|(バー)の説明です。

|(バー) : これはOR条件として複数の文字をセットします。

最後に

いかがでしたでしょうか?GASのReplaceメソッドについて正規表現と合わせていくつか紹介させて頂きました。Replaceメソッドを他のメソッドと組み合わせれば色々なことが可能になります。例えばReplaceメソッドの第二引数(変換後文字列)の個所にFunctionを埋め込んで、取得された文字列の小文字を大文字に変換させたり、またIf文やFor文を組み合わせても幅が広がるはずです。是非色々試してみてください。