JavaScriptのmatchでマルチラインフラグを使う

Pocket

複数行の文字列に対してJavaScriptのmatchを適用する場合について考えます。
次のような3行の文字列があったとします。

abc
xyz
123

通常

これに対してJavaScriptのmatchを使います。
正規表現パターンは「/^.*$/」とします。
「^」は先頭、「$」は末尾に一致します。
これでmatchを使ってみます。

t="abc\nxyz\n123";
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);

この場合、「abc」がマッチします。一つ見付けると処理を止めるようです。

グローバル

今度はスイッチに「g」を追加します。グローバルフラグなどと呼ばれます。「/^.*$/gm」とします。

t="abc\nxyz\n123";
m=t.match(/^.*$/gm);

この場合、「abc」「xyz」「123」がマッチします。

[ 2011年10月27日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報