はじめに
Notion Tips の第154回目は、モーリーさんから依頼があった正規表現の解説をしてみようと思います。単に正規表現の書き方を解説しても、難しいと感じてしまうだけで使ってもらえないと思うので、実際に Notion で使いそうなユースケースを紹介する形にしましょう。初回は任意の長さの数字列にマッチする \d+ です。
任意の長さの数字列にマッチ
今回紹介するのは「任意の長さの数字列にマッチ」する \d+ です。これは二つの機能の組み合わせです。最初の \d は数字1文字にマッチとなります。すなわち、0 から 9 までの数値にマッチします。123 という文字列であれば最初の 1 のみにマッチします。
次の + は一文字前の文字の 1 回以上の繰り返しにマッチします。例えば 1+ とした場合、1, 11, 111 などに全体でマッチしますが、112 のような場合は最初の 11 の部分だけマッチします。なお、空白は 1 が含まれないのでマッチしません。
この二つを組み合わせた \d+ となると、数字が 1 回以上の繰り返しとなるので、123 や 2024 などの数値の塊がそのままマッチする形になります。
応用例
ここで、数値のマッチを使った数式の例として、日付の文字列から日付を得るものを作成してみましょう。例えば、「2024年11月24日」、「2025/1/1」、「2025-02-05」のような文字列から日付を作成してみます。これらは区切り文字がそれぞれ異なりますが、数値の塊が三つあることが共通しています。ここでは数値の塊を正規表現で取り出すことができる match 関数を使ってみましょう。まず match だけを使ってみます。今回 "\d+" にマッチさせるとどの文字列もマッチした 3 つの数字文字列がリストの形で返ってきています。
prop("date string").match("\d+")

ここまで取れればあとは ISO8601 のフォーマットに従った文字列を作成するだけです。基本形式であれば 8 桁の数値を作ればいいだけなので簡単ですね。今、英語のテンプレートを作成しているため、English モードになってしまっていますが無事に日付が生成されていることがわかります。
prop("date string").match("\d+") .map(current.toNumber() * 100.pow(2-index)) .sum() .parseDate()

おわりに
今回は正規表現ユースケースの第一弾として、任意の長さの数字列にマッチする \d+ を解説しました。今後、ネタに困ったら正規表現のユースケースを考えて解説しようと思います。