2つのタグ間のJavaScript正規表現の複数行テキスト 質問する

2つのタグ間のJavaScript正規表現の複数行テキスト 質問する

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

おすすめ記事