オライリーの JavaScript 第6版 を図書館から借りて、 いろいろ調べている。 10 章の正規表現とパターンマッチングは知らないので、少し調べてみた。
正規表現リテラルを作るのがわかりやすい。このリテラルは、/ と / ではさむ。
const re = /sana/;
この正規表現に対してマッチする文字列はどんなものがあるだろうか。 これを調べるには RegExp.prototype.test を使うのがいい。
re.test("malsana"); // true, 文字列 "sana" にマッチする
re.test("malsanulejo"); // false; 文字列 "sana" にマッチしない
正規表現では、メタ文字を使って多くのパターンを表現できる。たとえば、文字クラスといって、 ある範囲の中の文字の一つにマッチングさせることができる。これには角かっこの組 [] を用いる。
例:アルファベットの母音の組 [AEIOUaeiou]
文字クラスには、範囲を表すハイフン - が使える。これは、文字が一定の順序で並んでいることを前提としている。
例:アルファベット大文字 [A-Z]
例:十進法の数字 [0-9]
例:十六進法の数字 [0-9A-Fa-f]
下のフォームは、正規表現と、その正規表現にマッチさせたい文字列を入れ、[テスト]のボタンをクリックすると、 マッチするかしないかをダイアログウィンドウで表示するプログラムである。このとき、正規表現として ブラウザの JavaScript が受け付けない場合は、「無効な正規表現です」とダイアログウィンドウに表示して終了する。 なお、[ひらがな]から[句読点、記号] のボタンをクリックすると、それぞれの文字種類を表す文字クラスを正規表現のカラムに表示する。
なお、文字列の置換も参照。
フォームのオプションの意味について説明する。
正規表現クックブック で、JavaScript では適用されていないとされていた項目が、 2021 年 4 月現在どのような状態にあるか、確認してみた。
(?i)や(?-i)、(?m)のようなモード修飾子は、現在もサポートしていない。これらは「無効な正規表現」とされる。
次のような使い方がある。三好達治の有名な詩「雪」から拝借した。
const snow = '太郎を眠らせ、太郎の屋根に雪ふりつむ';
const regexpTitle = /(?<name>[一-龠]+)を眠らせ、\k<name>/;
const groups = sir.match(regexpTitle).groups;
console.log(groups.name); // 太郎
まりんきょ学問所 > JavaScript 手習い > 正規表現とパターンマッチング