概要
GASのコードの中で正規表現を使って、googleカレンダーに記載された文字列のうちの特定の部分を消す、という作業をする必要があり、正規表現について少し勉強してみましたので、備忘をこちらに置いておこうと思います。
正規表現が正しいかどうかの判定は、こちらのサイトのお世話になりました。
学習記録ですので、何かお気づきの点がおありでしたら、ご指摘いただけますと幸いです。
【2022/9/23追記】正規表現チェッカーの対応ページのURLに誤りがありましたので修正しました。申し訳ございませんでした。
この文字列を探してみた
今回マッチを試みた文字列は、以下です。(どちらかに該当すればマッチ)
#元期限#yyyy-mm-dd hh:mm
または、
#Color#xx
ただし、xxは数字で1桁または2桁とし、
y,m,d,h,mはそれぞれ年月日時分秒に使われるアラビア数字とします。
つまり、カレンダーに
「TODO:月次報告書作成#元期限#2022-09-22 12:00#Color#02」
という対象の文字列があった場合、
「#元期限#2022-09-22 12:00」
または
「#Color#02」
をマッチさせる、という作業をします。
いきなりでは難しかったので、以下のように順を追って考えてみました。Step4のようにすれば、どうやら上記の文字列をマッチできそうに思います。
Step1
#ではさまれた最短一致をマッチする実験
(間の部分に#を含まない、と指定する[^#]を挿入することにより、最短一致にする)
正規表現チェッカーでの確認結果
https://www-creators.com/tool/regex-checker?r=%23%5B%5E%23%5D*%23&f=g
Step2
#元期限#または#Color#をマッチする実験
正規表現チェッカーでの確認結果
https://www-creators.com/tool/regex-checker?r=%23(%E5%85%83%E6%9C%9F%E9%99%90%7CColor)%23&f=g
Step3
#元期限#yyyy-mm-dd hh:mmまたは#Color#xx(xxは数字で1桁または2桁)をマッチする実験(y,m,d,h,m,xはアラビア数字であればOKとする簡略版)
正規表現チェッカーでの確認結果
https://www-creators.com/tool/regex-checker?r=%23(%E5%85%83%E6%9C%9F%E9%99%90%23%5Cd%7B4%7D-%5Cd%7B2%7D-%5Cd%7B2%7D%5Cs%5Cd%7B2%7D%3A%5Cd%7B2%7D%7CColor%23%5Cd%5Cd%3F)&f=g
Step4
#元期限#yyyy-mm-dd hh:mmまたは#Color#xx(xxは数字で1桁または2桁)をマッチする(y,m,d,h,mは時分秒に限定されたアラビア数字とする厳密版)
正規表現チェッカーでの確認結果
https://www-creators.com/tool/regex-checker?r=%23(%E5%85%83%E6%9C%9F%E9%99%90%23%5Cd%7B4%7D-(0%5B1-9%5D%7C1%5B0-2%5D)-(0%5B1-9%5D%7C%5B12%5D%5B0-9%5D%7C3%5B01%5D)%5Cs(0%5B1-9%5D%7C1%5B0-2%5D)%3A(0%5B0-9%5D%7C%5B12345%5D%5B0-9%5D)%7CColor%23%5Cd%5Cd%3F)&f=g
関連する正規表現の基本メモ
参照したサイト
MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
前提条件 - 最短一致と最長一致
こちらのサイトの説明が分かりやすかったので、引用させていただきます。
https://www-creators.com/archives/1804
その他
MDN(https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions)より引用