3分でわかる!GASのmatch関数の使い方

GASのmatch関数ってどうやって使うんだろう?僕にはちょっと難しくて…。
猫男
猫男
catman
catman
よし、catmanが「GASのmatch関数」について解き明かしたる。

GASでmatch関数を使う基本

GASのmatch関数は、与えられた文字列が正規表現にマッチするかどうかを調べる関数だ。

基本的な使い方

まずは、簡単な例から始めよう。


function matchExample() {
  const text = "こんにちは、世界!";
  const pattern = /こんにちは/;
  const result = text.match(pattern);
  Logger.log(result); // 結果: ["こんにちは"]
}

この例では、match関数を使って「こんにちは」という文字列が存在するか確認している。

結果は配列で返され、配列に文字列が含まれている。

match関数の戻り値

match関数は、マッチした場合には配列を、マッチしなかった場合にはnullを返す。

今回のコードなら、["こんにちは"]という配列が返り値になるはずだ。

 

GAS matchの変数の使用

変数にパターンを入れて、それを使うこともできるの?
猫男
猫男
catman
catman
もちろんできる。変数にパターンを入れて、マッチパターンを自由に変えられるのさ。

function variableMatch() {
  const text = "サンプルテキスト";
  const keyword = "テキスト";
  const pattern = new RegExp(keyword, "g");
  const result = text.match(pattern);
  Logger.log(result); // ["テキスト"]
}

このスクリプトなら、keywordという変数を自由に変えてmatchするか確かめられる。

改行や複数行にわたるマッチ

正規表現には改行や複数行対応のオプションがある。それを使ってみよう。

改行や複数行の文をうまくマッチさせるにはどうすれば?
猫男
猫男
catman
catman
改行や複数行に対応したいときは、オプションに注意だ。このスクリプトは「mフラグ」オプションを使っている。

function multiLineMatch() {
  const text = "これは\n複数行の\nテキストです";
  const pattern = /^複数行/m;
  const result = text.match(pattern);
  Logger.log(result); // 結果: ["複数行"]
}
  • ^複数行:
    行の先頭が ‘複数行’ で始まる」という条件
  • m フラグ(multi-line フラグ):
    通常 ^文字列の先頭 を意味しますが、
    m をつけると 各行の先頭 に変わります(\n のあとも対象)

完全一致の処理

完全一致を確認したいなら、^$を使う。


function exactMatch() {
  const text = "完全一致テキスト";
  const pattern = /^完全一致テキスト$/;
  const result = text.match(pattern);
  Logger.log(result); // 結果: ["完全一致テキスト"]
}
    • const text = "完全一致テキスト";
      → 検索対象となる文字列。
    • const pattern = /^完全一致テキスト$/;
      → 正規表現オブジェクト。

      • ^:文字列の先頭を意味する
      • 完全一致テキスト:この文字列そのものに一致
      • $:文字列の末尾を意味する

      → つまり「文字列全体が ‘完全一致テキスト’ と一致する場合のみマッチする」。

マッチしない場合

マッチしないパターンが必要なときは、nullを想定してコードを書こう。

マッチしないと null が返り値になるからな。


function notMatch() {
  const text = "不一致";
  const pattern = /一致しない/;
  const result = text.match(pattern);
  Logger.log(result); // 結果: null
}

複数一致を検索するにはmatchAll

複数一致を求めたいときは、matchAllメソッドを使おう。


function multipleMatches() {
  const text = "赤リンゴ、青リンゴ、緑リンゴ";
  const pattern = /リンゴ/g;
  const matches = [...text.matchAll(pattern)];
  Logger.log(matches); // 結果: [["リンゴ"], ["リンゴ"], ["リンゴ"]]
}
  • const text = "赤リンゴ、青リンゴ、緑リンゴ";
    → 検索対象となる文字列。3回「リンゴ」が登場。
  • const pattern = /リンゴ/g;
    → 「リンゴ」という文字列にマッチする正規表現。

    • g フラグ(global):すべての一致箇所を検索
  • const matches = [...text.matchAll(pattern)];
    matchAll() は一致したすべての結果を反復可能なオブジェクト(Iterator)として返す。
    スプレッド構文([...])でこれを配列に変換
  • Logger.log(matches);
    → 一致した配列の内容をログに出力。
    結果は [["リンゴ"], ["リンゴ"], ["リンゴ"]] のようになる。
同じ文字列が複数あると、全部見つけるのが簡単にできるんだね!
猫男
猫男
catman
catman
その通り。マルチマッチはGASでの文字列操作の強力な武器だ。

練習問題

それでは、GASのmatch関数を使って練習してみよう。

  1. 次の文字列「ルビー、パール、ダイヤモンド」から「パール」を見つけてみよう。
  2. 「猫と犬とまた猫」という文字列から、「猫」を探してみよう。

解答・解説


// 問題1の解答
function findPearl() {
  const text = "ルビー、パール、ダイヤモンド";
  const pattern = /パール/;
  const result = text.match(pattern);
  Logger.log(result); // 結果: ["パール"]
}

// 問題2の解答
function findCats() {
  const text = "猫と犬とまた猫";
  const pattern = /猫/g;
  const matches = [...text.matchAll(pattern)];
  Logger.log(matches); // 結果: [["猫"], ["猫"]]
}

これで、GASのmatch関数を使いこなせるはずだ。

それぞれのメソッドやオプションを駆使して、GASをもっと楽しく使ってみてくれ!