GASで正規表現をフル活用:matchから変数置換、改行テクニックまで一挙解説!
GASで正規表現を使ってみたいんだけど、どこから手をつけたらいいのか…知識が全然なくて不安で…

猫男

catman
catmanがGASの正規表現をしっかり教えてやろう。まずは基本から始めようか。正規表現は文字列操作の強力な武器だよ。
GASにおける正規表現の基礎
正規表現は、特定のパターンに一致する文字列を検索、変更したり、抽出するための表現です。GASでもJavaScriptと同様に使うことができます。
GAS正規表現の基礎:matchメソッドを使う
まず、matchを使ってみよう。正規表現を使って文字列の中で特定のパターンを見つけることができる。
function findEmails(text) {
var emailPattern = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
return text.match(emailPattern);
}
Logger.log(findEmails("Contact us at info@example.com or support@example.org."));
ここでのmatchメソッドは、正規表現に一致する文字列の配列を返します。/…/gは正規表現のグローバルフラグで、複数マッチを考慮します。
GAS正規表現の応用:置換メソッドを使う
文字列を置換するにはreplaceメソッドを使うんだ。
function maskEmails(text) {
var emailPattern = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g;
return text.replace(emailPattern, "[redacted]");
}
Logger.log(maskEmails("Email us at info@example.com."));
この例では、テキスト中のすべてのメールアドレスを「[redacted]」に置換している。
最初は難しいと思ってたけど、少しづつ分かり始めました!次のステップはなんでしょうか?

猫男
GASでの変数を利用した正規表現操作
GAS正規表現と変数の併用
変数で動的に正規表現を作ることもできる。例えば、ユーザー指定のパターンや動的に変化する内容に対応する場合だ。
function highlightKeyword(text, keyword) {
var pattern = new RegExp("\\b" + keyword + "\\b", "g");
return text.replace(pattern, "[highlight]" + keyword + "[/highlight]");
}
Logger.log(highlightKeyword("Highlight the word cat in this sentence.", "cat"));
上の例では、ユーザーが指定したキーワードに基づいて正規表現を作成し、その部分をハイライトしている。
GAS正規表現で改行を考慮する
複数行に渡る操作では、mフラグが便利だ。
function findLinesWithKeyword(text, keyword) {
var pattern = new RegExp("^.*" + keyword + ".*$", "gm");
return text.match(pattern);
}
Logger.log(findLinesWithKeyword("Line one\nKeyword line\nLast line", "Keyword"));
mフラグは行頭(^)と行末($)をそれぞれ各行の頭と末尾に適用する。
様々な操作ができそうですね!こんなに活用できるなんて知りませんでした!

猫男

catman
良いぞ。その興味を大事にしよう。次はGASで使えそうな正規表現の例をいくつかリストアップしていこう。
GASでよく使う正規表現一覧
名前 | 正規表現 |
---|---|
/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/ | |
URL | /(https?:\/\/[^\s]+)/g |
Phone Number | /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g |
Whitespace | /\s+/g |
Digits | /\d+/g |
これでGASでの正規表現がさらに自由に使いこなせるようになりそうです!ありがとうございました、catman!

猫男
練習問題
1. 次のテキスト “Call me at 123-456-7890 or 098-765-4321.” において、すべての電話番号を'[電話番号]でマスクしてください。
2. GASでURLを検出してリストアップする関数を書いてみましょう。
解答・解説
function maskPhoneNumbers(text) {
var phonePattern = /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g;
return text.replace(phonePattern, "[電話番号]");
}
Logger.log(maskPhoneNumbers("Call me at 123-456-7890 or 098-765-4321."));
解説: replaceメソッドを使っています。電話番号のパターンに一致する部分を”[電話番号]”に置換しました。
function extractUrls(text) {
var urlPattern = /(https?:\/\/[^\s]+)/g;
return text.match(urlPattern);
}
Logger.log(extractUrls("Visit https://example.com or http://another.com."));
解説: matchメソッドを利用して、正規表現に一致するURLをリストとして取得しています。[^\s]はスペース以外の文字を1つ以上含む部分にマッチします。