Javascriptの正規表現で学んだ3つのケース
GASを使いGmailで受信したメールを自動でスプレッドシートに、転載するプログラムを作りました。
その際に、正規表現に悩みました。
今回備忘録の意味も込めて、学んだ3つのパターンを掲載したいと思います。
<>で囲まれたメールアドレスを抽出
wordPressから送られてくる内容ということもあり、フォームに投稿した人のメールアドレスが、<>で囲まれていました。
下記の正規表現で、抽出できました。
/<([^>]*)>/
解説
/ ... 正規表現の開始と終了を示すデリミタです。
< ... 小なり記号(<)にマッチします。この文字を検索の開始点として認識します。
( ... キャプチャグループの開始を示します。キャプチャグループは正規表現にマッチした部分を記憶するために使われます。
[^>] ... キャレット(^)が角括弧([])の中で使われた場合、それに続く文字以外の任意の1文字にマッチします。ここでは、大なり記号(>)以外の任意の文字にマッチすることを意味しています。
* ... 直前の文字が0回以上繰り返すことを許します。ここでは、[^>]、つまり>以外の文字が何度でも繰り返されることを許容しています。
) ... キャプチャグループの終了を示します。
> ... 大なり記号(>)にマッチします。この文字で検索の終了点を認識します。
項目名の次の行の値を抽出
wordPressから送られてくるフォームで、項目名の横に続けて値があるときは、抽出しやすいと思うのです。
今回は、項目名の後に改行コードが有る場合です。
/項目名:\r?\n(.*)/
解説
\r?\n を使用して、改行が CR+LF(Windows形式)か LF(Unix/Linux形式)のどちらにも対応できるようにしています。
複数行のデータを抽出
先ほどは、項目名の次の行の値を抽出するときでしたが、今回は、項目名の後に複数行ある場合に対応できるようにします。
/メッセージ本文:([\s\S]*)/
解説
[\s\S]*を使用して、改行を含む複数行のテキストを一致させます。
改行を含む任意の文字にマッチさせるには、[\s\S] のようなパターンを使用する必要があります。\s は空白文字(スペース、タブ、改行など)にマッチし、\S は非空白文字にマッチします。[\s\S] は空白と非空白の両方、つまり「任意の文字」にマッチします。
正規表現の記号が含まれている時のエスケープ対応
正規表現の[や]という角括弧に含まれるいずれか1文字にマッチするときに使用する記号が文字として扱うときは、バックスラッシュを付けて機能しなくします。
\[\]
補足
今回の正規表現や解説は、無料の生成AIサービスのリートンのGPT-4 turboを使って作成しました。
今回正規表現に困ったので、リートンのGPT-4 turboを活用して解決しました。
その際に解説された内容を忘れないように、記事にまとめました。
今回Google のGemini Advancedに日本語で質問したり、MicrosoftのCopilot無料版に質問するなどしましたが、リートンのGPT-4 turboが一番的確な回答を得ることができたと思いました。
ワイルドカード
?が一文字、*が一文字以上の文字を表すことができる記号を、ワイルドカードと言います。
検索する際に、この記号を使うことが多いと思います。
正規表現でも、?と*が同じ意味で使われていると思いました。
役立つ記事
こちらの記事を見つけました。
Discussion