🐙

Javascriptの正規表現で学んだ3つのケース

2024/02/25に公開

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が一番的確な回答を得ることができたと思いました。

ワイルドカード

?が一文字、*が一文字以上の文字を表すことができる記号を、ワイルドカードと言います。
検索する際に、この記号を使うことが多いと思います。
正規表現でも、?と*が同じ意味で使われていると思いました。

役立つ記事

こちらの記事を見つけました。
https://qiita.com/List202/items/05a27c46d9b11d04fb39

Discussion