【GAS】正規表現の使い方(検索・抽出・置換・分割)

GASexec,match,replace,search,split,test,文字列,正規表現

Google Apps Script(GAS)を使っていると、データ処理する際に「この条件に一致する文字だけ抽出したい」といったシーンが頻繁に訪れますよね。表計算ソフト等では様々な機能で条件指定が充実していますが、GASのようなスクリプトだと正規表現を用いて指定するのが一番早かったりします。

この記事では、GASで使える正規表現一覧と正規表現を使える便利なメソッド(検索・抽出・置換・分割)のサンプルコードを紹介します。

正規表現とは

正規表現とは文字列のパターンを表記するための方法のことです。

郵便番号は【3桁の数字ハイフン(-)4桁の数字、電話番号は【0から始まる3桁の数字4桁の数字4桁の数字】、等をイメージすると分かりやすいかもしれません。

パターンにマッチした文字列を検索、抽出、置換等を行うことができるため、GASに限らずプログラミングや表計算を使うときは正規表現を覚えておくと大変便利です。すべてのパターンは覚えられなくても、こう表現するとうまく条件指定できそうだ、と当たりがつけられるだけでも作業効率は大幅に改善するはずです。

GASで使用できる正規表現

文字機能正規表現例マッチする文字列例
.任意の1文字A.CABC、AAC、ANC
*直前の文字が0文字以上AB*CAC、ABC、ABBBC
+直前の文字が1文字以上AB+CABC、ABBBC
?直前の文字が0文字または1文字以上AB?CAC、ABC
{n}
{n,}
{n,m}
直前の文字をn文字
直前の文字をn文字以上
直前の文字をn~m文字
A{2}
A{2,}
A{2,4}
AA
AA、AAAAAA
AA、AAAAA
|またはABC|DEFABC、DEF
[][]内のいずれかの文字[ABCDE]A、B、C、D、E
{}グループ{ABC}+ABCABC
^先頭^A.*ABC、AYZ
$末尾.*Z$XYZ、ABZ
\メタ文字エスケープ
\w任意の半角英字、数字、アンダースコア(_)のうち1文字
[A-Za-z0-9]と同じ
\d数字の一文字
[0-9]と同じ
\n改行
\r復帰
\tタブ
\s空白文字(改行、復帰、タブ)

正規表現で使える便利なGASメソッド

検索編

execメソッド

検索条件.exec(String)

execメソッドは指定した検索条件が含まれる文章と場所を検索してくれるメソッドです。実行結果は連想配列を含む配列で返してくれます。

  //検索対象の文字列
  let str = "吾輩は猫である。";

  //条件
  let regex = /猫/;

  let result = regex.exec(str);
  console.log(result);
実行結果

[ '猫’, index: 3, input: '吾輩は猫である’, groups: undefined ]

matchメソッド

String.match(検索条件)

matchメソッドもexecメソッドと同様に、指定した検索条件が含まれる文章と場所を検索してくれるメソッドです。まずは同じ条件で実行してみましょう。

  //検索対象の文字列
  let str = "吾輩は猫である";

  //条件
  let regex = /猫/;

  //matchメソッド
  let result = str.match(regex);
  console.log(result);
実行結果

[ '猫’, index: 3, input: '吾輩は猫である’, groups: undefined ]

execメソッドのサンプルと同じ実行結果になりましたね。

execメソッドとmatchメソッドはオプションを指定しなければ、同じ実行結果を返します。matchメソッドでオプション指定したときの実行結果を見てみましょう。

  //検索対象の文字列
  let str = "吾輩は猫である。名前はまだない。";

  //条件
  let regex = /は/g;

  //matchメソッド
  let result = str.match(regex);
  console.log(result);
実行結果

[ 'は’, 'は’ ]

『"吾輩は猫である。名前はまだない。"』の文章の中に「は」という文字は2つ入っているので、両方ともマッチしてくれました。

matchメソッドについては下記の記事で詳細を解説しているのでぜひ確認してみてください。

searchメソッド

String.search(検索条件)

searchメソッドは、対象文字列から検索条件の場所を教えてくれます。

  //検索対象の文字列
  let str = "吾輩は猫である。";

  //条件
  let regex = /猫/;

  let result = str.search(regex);
  console.log(result);
実行結果

3

「吾輩は猫である。」の中で「猫」は4番目(インデックスは3)という結果が返ってきました。

testメソッド

検索条件.test(String)

testメソッドは、検索条件が文字列の中に含まれていたらtrueを、含まれていなかったらfalseを返すバイナリーです。

  //検索対象の文字列
  let str = "吾輩は猫である。";

  //条件
  let regex = /猫/;

  let result = regex.test(str);
  console.log(result);
実行結果

true

  regex = /犬/;

  result = regex.test(str);
  console.log(result);
実行結果

false

for文などで正規表現を使って条件指定したい時はtestメソッドが一番簡単そうですね。

抽出編

matchメソッド

String.match(抽出条件)

検索機能としても使ったmatchメソッドですが、文字列の抽出にも活用できます。実務ではこちらの目的で使う方が多いかもしれません。

ひらがな・漢字・数字が混在する文字列から数字だけ、ひらがなだけを抽出してみます。対象すべてを抽出するためにオプションフラグ「g」をつけています。

  //検索対象の文字列
  let str = "よしお1池崎5なべあつ9";

  //数字だけ
  let regex = /\d/g;

  let result = str.match(regex);
  console.log(result);
実行結果

[ '1’, '5’, '9’ ]

  //ひらがなだけ
  regex = /[ぁ-ゟー]+|[゠-ヿ]+/g;

  result = str.match(regex);
  console.log(result);
実行結果

[ 'よしお’, 'なべあつ’ ]

置換編

replaceメソッド

String.replace(“条件","置換文字列")

GASにおける文字列置換にはreplaceメソッドを使います(正規表現でも正規表現でなくてもOK)。正規表現を使って、「2桁の数字を1に置換」という処理を行ってみます。

  //検索対象の文字列
  let str = "11人目のストライカー";

  //検索条件となる文字列
  let regex = /\d{2}/;

  let result = str.replace(regex,"1");
  console.log(result);
実行結果

1人目のストライカー

replaceメソッドに関する詳細は下記の記事ても解説しています。

分割編

splitメソッド

String.split(分割条件)

文字列の分割にはsplitメソッドを使用します。split関数は、文字列を分割している記号(「.」「/」「・」など)を1文字指定して使用することが多いですが、正規表現も活用できます。

  //検索対象の文字列
  let str = "霜降り,チョコプラ/さらば・ジャル 藤崎";

  //検索条件となる文字列
  let regex = /,|\/|・|\s/;

  let result = str.split(regex);
  console.log(result);
実行結果

[ '霜降り’, 'チョコプラ’, 'さらば’, 'ジャル’, '藤崎’ ]

これでどんな分割のされ方をしていても対処できそうです。

まとめ

GASで使える正規表現一覧と正規表現を使える便利なメソッド(検索・抽出・置換・分割)をサンプルコードとともにご紹介しました。

正規表現を使えば、無駄なループ処理を削減し業務効率がぐっと向上します。ぜひマスターしてください。

この記事を書いた人

てつお
広告代理店出身、事業会社でWebマーケティングや開発の仕事をしている26歳です。プロフィール詳細はこちら
■Google広告認定資格|Google アナリティクス個人認定資格(GAIQ)|TOEIC920点