JavaScriptの正規表現で多行テキストを扱うテクニック
先生と生徒の会話形式で理解しよう
生徒
「先生、JavaScriptで複数行にわたる文章から特定のパターンを探したいです。」
先生
「それなら、正規表現のmフラグや[\s\S]のようなテクニックを使うと便利です。mはマルチラインの意味で、文章全体を行ごとに検索できます。」
生徒
「具体的にはどんな書き方になるんですか?」
先生
「順番に例を見ていきましょう。」
1. mフラグで行頭・行末を扱う
通常、^は文字列の先頭、$は文字列の末尾にマッチします。しかし、mフラグを使うと各行の先頭と末尾にもマッチします。
const text = `こんにちは
JavaScript
楽しいです`;
const regex = /^JavaScript/m;
const matches = text.match(regex);
console.log(matches); // ["JavaScript"]
このように、複数行のテキストでも行頭のパターンを検出できます。
2. [\s\S]で改行を含む全体を検索
正規表現の.は通常改行文字にマッチしません。改行も含めて全体を検索したい場合は[\s\S]と書きます。\sは空白文字、\Sは空白以外の文字です。
const text = `タイトル
本文1
本文2`;
const regex = /タイトル[\s\S]*本文2/;
const matches = text.match(regex);
console.log(matches); // ["タイトル\n本文1\n本文2"]
これで、複数行にまたがる文章全体を1つのパターンとして取得できます。
3. 複数行の先頭と末尾を同時に扱う
^や$をmフラグと組み合わせることで、複数行の各行で条件を確認できます。
const text = `エラー: ファイルが見つかりません
警告: ディスク容量が少ない
情報: 処理が完了しました`;
const regex = /^(エラー|警告)/gm;
const matches = text.match(regex);
console.log(matches); // ["エラー","警告"]
これにより、複数行の中で特定の行だけを抽出できます。
4. replaceメソッドで複数行を一括変換
正規表現を使ってreplaceすると、複数行にまたがるテキストもまとめて置換できます。
const text = `JavaScript
Java
Python`;
const result = text.replace(/JavaScript/g, "JS");
console.log(result);
/*
JS
Java
Python
*/
これで複数行のテキストの中から特定の文字列を一括で変換できます。
5. 注意点とテクニック
- 改行文字を含むパターンは
[\s\S]や[^]を使う - 行頭・行末を扱う場合は
mフラグを忘れずに - 複数行テキストでは、マッチの位置を確認する場合は
execとループを組み合わせると便利 - 置換する場合は
replaceメソッドとgフラグを併用する
これらのテクニックを覚えると、複数行にわたる文章でも柔軟に正規表現を活用できます。