1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScript regex 2つのタグの間にある複数行のテキスト

2022-04-18 09:13:31

質問

HTMLから文字列を取得する正規表現を書きましたが、multilineフラグが効かないようです。

これは私のパターンです。 h1 タグを使用します。

var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi
m = html.search(pattern);
return m[1];

試しに文字列を作成してみました。この文字列の中に" \n" が含まれていると、結果は常にnullになります。をすべて削除すると、"not "があってもなくても正しい結果が得られました。 /m フラグを使用します。

私の正規表現に何か問題があるのでしょうか?

解決方法は?

あなたが探しているのは /.../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