Google Apps Scriptの正規表現の使い方・活用事例(検索/置換/抽出)【GAS】

Google Apps Script

今回は、Google Apps Script(GAS)の正規表現の使い方と、実際の活用事例について解説します。

正規表現とは?

正規表現とは、文字列のパターンマッチング(検索、置換、抽出)に使われる表現のことです。

正規表現を用いることで、

  • 郵便番号になっている部分だけ抜き出す
  • 電話番号のハイフンを削除
  • 文末の「〜です。」を、一括で「〜だ。」に変換

など、文字列の操作を便利に行うことができます。

GASの文字列マッチング関数①:exec()

GASでは、正規表現を用いた文字列マッチングにexec()メソッドを使用します。

GASの文字列マッチングexec()

正規表現.exec(文字列)  戻り値:配列(何番目にあるか等)

 ※一致するものがない場合はnullが返ります
 ※マッチする文字列が複数ある場合は、最初の位置が返ります

function myFunction() {

  var regex = /年/; 
  var str = "2023年09月22日";

  var result = regex.exec(str);

  console.log(result); 

}
実行結果
	[ '年', index: 4, input: '2023年09月22日', groups: undefined ]

GASの文字列マッチング関数②:match()

GASの文字列マッチングmatch()

文字列.match(正規表現)  戻り値:配列(※gフラグ有無により異なる)

 ※一致するものがない場合はnullが返ります
 ※gフラグあり:一致したすべての結果、gフラグなし:exec()と同じ結果

function myFunction() {

  var str = "ababcabcd";
  var re = /(a.c)/;
  var result = str.match(re);

  console.log(result);

}
実行結果
	[ 'abc', 'abc', index: 2, input: 'ababcabcd', groups: undefined ]

上記の場合、一致する最初の結果が返ります。ここにgフラグ(グローバルフラグ)をつけると、一致するすべての結果を返すようになります。

gフラグをつけた場合(/(a.c)/g)
	[ 'abc', 'abc' ]

正規表現一覧

文字列説明
.任意の1文字A.C:AあC、ABC、A★C
..定食:焼肉定食、唐揚定食
*直前のパターンの
0回以上の繰り返し
ABC*:AB、ABCC、ABCCC
(直前のCは一度もなくてもいい)
go*gle:ggle、gooooooogle
+直前のパターンの
1回以上の繰り返し
ABC+:ABC、ABCC、ABCCC
(直前のCは一度以上ないとだめ)
go+gle:google、gooooooogle
?直前のパターンの
0回か1回の繰り返し
ABC?:AB、ABC
(直前のCは0回か1回しかだめ)
go?gle:ggle、google
^先頭にマッチする^犬:「犬はかわいい」は該当
(「かわいい犬」はだめ)
$末尾にマッチするござる$:「拙者でござる」は該当
(「拙者でござるよ」はだめ)
\\をエスケープ\\:「\」を検索する
\n改行
\tタブ
\s空白文字半角の空白、タブ、改行が対象
\d半角数字“It’s 200 yen.”
\d:「2」が該当
\d+:「200」が該当
\w全ての半角英数字と
_(アンダースコア)
“あいうabc123”
\w:「あ」が該当
\w{4}:「abc1」が該当
()グループにまとめた
複数の文字
“おは!おはよ!おはよう!”
/(おは)/:「おは!」が該当
/(おはよ)/:「おはよ!」が該当
[]指定した文字の
いずれか
[あいう]:「あ」「い」「う」が該当
[A-Z]:A~Zのいずれか
[0-9]:0~9のいずれか
{n}直前の文字を
n回繰り返し
ABC{3}:ABCCC
[0-9]{4}:4桁の半角数字
|またはGoogle|Apple:「Google」か「Apple」

正規表現マッチング後の操作

マッチングした文字列の抽出

正規表現でマッチングした文字列を取り出すには、先ほど文字列の検索でも使用したmatchメソッドを使います。

文字列抽出

文字列.match(正規表現)  戻り値:条件に一致した部分の文字列

 ※一致するものがない場合はnullが返ります
 ※gフラグをつけることで一致した文字列が返ります。つけ忘れ注意!

function myFunction() {

  var str = "これは100円です。";
  var re = /[0-9]{3}円/g;    // gフラグをつけると一致した文字列が返ります!
  var result = str.match(re);

  console.log(result);

}
実行結果
	[ '100円' ]

マッチングした文字列の置換

正規表現でマッチングした文字列を置換するには、replaceメソッドを使用します。

文字列置換

文字列.replace(置換対象, 置換文字列)  戻り値:置換後の文字列

 ※一致するものがない場合はnullが返ります
 ※gフラグをつけることで対象が複数存在する場合全てを置換します

function myFunction() {

  var str = "焼肉定食・焼肉弁当・焼肉セットセール中!";
  var re = /(焼肉)/;
  var result = str.replace(re, "生姜焼き");

  console.log(result);

}
実行結果
	生姜焼き定食・焼肉弁当・焼肉セットセール中!

置換対象が複数ある場合

条件に一致するもの全てを置換したい場合は、正規表現に「g」を付加します。

function myFunction() {

  var str = "焼肉定食・焼肉弁当・焼肉セットセール中!";
  var re = /(焼肉)/g;
  var result = str.replace(re, "生姜焼き");

  console.log(result);

}
実行結果
	生姜焼き定食・生姜焼き弁当・生姜焼きセットセール中!

対象を削除したい場合

対象を削除したい場合は、置換文字列に「””」をセットします。

function myFunction() {

  var str = "焼肉定食・焼肉弁当・焼肉セットセール中!";
  var re = /(焼肉)/g;
  var result = str.replace(re, "");

  console.log(result);

}
実行結果
	定食・弁当・セットセール中!

活用事例

ここからは、正規表現を使用した実際の活用例を紹介します。

電話番号の取り出し

正規表現:電話番号

0[789]0-\d{4}-\d{4}  // 携帯番号のみ一致
\d{2,3}-\d{4}-\d{4}  // 携帯番号・固定電話に一致

以下のようなスプレッドシートから電話番号を抽出する際の正規表現です。

const id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

function myFunction() {

  var spreadSheet = SpreadsheetApp.openById(id);
  sheet = spreadSheet.getSheetByName("シート1");

  var str = sheet.getRange("A1").getValue();
  var re = /0[789]0-\d{4}-\d{4}/g;
  
  var result = str.match(re);

  console.log(result);

}
実行結果
	080-1234-5678

日付の取り出し

以下は、様々なパターンに対する誕生日の正規表現です。

正規表現:年月日

1995/03/07 :[0-9]{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])
1995-3-7   :[0-9]{4}-([1-9]|1[0-2])-([1-9]|[12][0-9]|3[01])
1995年3月7日 :[0-9]{4}年([1-9]|1[0-2])月([1-9]|[12][0-9]|3[01])
1995.03.07  :[0-9]{4}.(0[1-9]|1[0-2]).(0[1-9]|[12][0-9]|3[01])

0付きのとき、0なしのときどちらにも一致するようにするには、

[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[12][0-9]|3[01])日

となります。

HTMLタグの除去

以下のようなHTMLタグが含まれるテキストから、HTMLタグを除去する正規表現です。

正規表現:HTML

<[^>]+>

<p>ようこそ、<a href="https://www.example.com">私たちのウェブサイト</a>へ!</p>
<div class="info">私たちのウェブサイトでは、さまざまな<strong>商品やサービス</strong>を提供しています。</div>
<ul>
    <li>商品A</li>
    <li>商品B</li>
    <li>商品C</li>
</ul>
<span>訪問していただき、ありがとうございます。</span>
  var str = sheet.getRange("A1").getValue();
  var re = /<[^>]+>/g;
  
  var result = str.replace(re, "");

まとめ

今回は、Google Apps Script(GAS)における正規表現の使い方について解説しました。

文字列の操作に関して、正規表現を使って設定したい場合もあるかと思うので、そのような場合に参考になれば幸いです。

なお、本記事の正規表現については以下を参考に作成しています。

MDN Web Docs>正規表現構文早見表

¥2,860 (2024/04/24 23:14時点 | Amazon調べ)
chaso

文系出身、数字が苦手な平凡主婦。塾講師、大手企業SE、不動産事務、Webライター、QAエンジニアを経て現在RPAエンジニアとして働いています。機械音痴だけど効率化や自動化をこよなく愛しています!お仕事の依頼・ご相談は問い合わせよりお願いいたします♪

chasoをフォローする

コメント

タイトルとURLをコピーしました