複数行の文字列に対してJavaScriptのmatchを適用する場合について考えます。
次のような3行の文字列があったとします。
abc
xyz
123
xyz
123
通常
これに対してJavaScriptのmatchを使います。
正規表現パターンは「/^.*$/」とします。
「^」は先頭、「$」は末尾に一致します。
これでmatchを使ってみます。
t="abc\nxyz\n123";
m=t.match(/^.*$/);
m=t.match(/^.*$/);
こんな感じです。
実際には、何もマッチしません。
改行が「\n」だとすると、元の3行の文字列は「abc\nxyz\n123」と考えられます。
「.」は「\nを除く任意の1文字」に一致します。
先頭から末尾の間に「\n」があったら一致しない、というわけです。
マルチライン
対象が複数行の場合は「m」を使います。つまり「/^.*$/m」とします。マルチラインフラグなどと呼ばれます。
これが設定されている場合、「^」は「\n」または「\r」の直後とも一致します。
また「$」は「\n」または「\r」の直前とも一致します。
t="abc\nxyz\n123";
m=t.match(/^.*$/m);
m=t.match(/^.*$/m);
この場合、「abc」がマッチします。一つ見付けると処理を止めるようです。
グローバル
今度はスイッチに「g」を追加します。グローバルフラグなどと呼ばれます。「/^.*$/gm」とします。
t="abc\nxyz\n123";
m=t.match(/^.*$/gm);
m=t.match(/^.*$/gm);
この場合、「abc」「xyz」「123」がマッチします。
コメント