今回は、Google Apps Script(GAS)の正規表現の使い方と、実際の活用事例について解説します。
正規表現とは?
正規表現とは、文字列のパターンマッチング(検索、置換、抽出)に使われる表現のことです。
正規表現を用いることで、
- 郵便番号になっている部分だけ抜き出す
- 電話番号のハイフンを削除
- 文末の「〜です。」を、一括で「〜だ。」に変換
など、文字列の操作を便利に行うことができます。
GASの文字列マッチング関数①:exec()
GASでは、正規表現を用いた文字列マッチングにexec()メソッドを使用します。
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()
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メソッドを使います。
function myFunction() {
var str = "これは100円です。";
var re = /[0-9]{3}円/g; // gフラグをつけると一致した文字列が返ります!
var result = str.match(re);
console.log(result);
}
実行結果
[ '100円' ]
マッチングした文字列の置換
正規表現でマッチングした文字列を置換するには、replaceメソッドを使用します。
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);
}
実行結果
定食・弁当・セットセール中!
活用事例
ここからは、正規表現を使用した実際の活用例を紹介します。
電話番号の取り出し
以下のようなスプレッドシートから電話番号を抽出する際の正規表現です。
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
日付の取り出し
以下は、様々なパターンに対する誕生日の正規表現です。
0付きのとき、0なしのときどちらにも一致するようにするには、
[0-9]{4}年(0?[1-9]|1[0-2])月(0?[1-9]|[12][0-9]|3[01])日
となります。
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)における正規表現の使い方について解説しました。
文字列の操作に関して、正規表現を使って設定したい場合もあるかと思うので、そのような場合に参考になれば幸いです。
なお、本記事の正規表現については以下を参考に作成しています。
コメント