HTML から文字列を取得する正規表現を作成しましたが、複数行フラグが機能しないようです。
h1
これは私のパターンであり、タグ内のテキストを取得したいのです。
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi
m = html.search(pattern);
return m[1];
テスト用に文字列を作成しました。文字列に「\n」が含まれている場合、結果は常に null になります。すべての「\n」を削除すると、フラグの有無に関係なく正しい結果が得られました/m
。
私の正規表現の何が問題なのでしょうか?
ベストアンサー1
探しているのは、 dotall/.../s
修飾子とも呼ばれる修飾子です。これは、ドットが改行にも一致するように強制しますが、デフォルトではそうしません。.
残念なことに、これは
JavaScript には存在しません
(ES2018 以降では存在します。下記参照)\s
。 良いニュースとしては、次のように文字クラス (例) とその否定 ( ) を一緒に使用することで回避できることです\S
。
[\s\S]
したがって、あなたの場合、正規表現は次のようになります。
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
ES2018 以降、JavaScript はs
(dotAll) フラグをサポートしているため、最新の環境では、正規表現は記述したとおりになりますが、s
末尾にフラグが付きます ( m
;ではなく)。フラグによって、 と の動作がm
変更されます。^
$
.
/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is