ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の複数行フラグ (/m/) が正規表現内の改行と一致しないのはなぜですか?

JavaScript の複数行フラグ (/m/) が正規表現内の改行と一致しないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 08:00:02852ブラウズ

Why Does JavaScript's Multiline Flag (/m/) Fail to Match Newlines in Regular Expressions?

JavaScript での正規表現を使用した複数行テキストの抽出

HTML では、多くの場合、タグ内から情報を抽出する必要があります。これを行う方法の 1 つは正規表現を使用することです。ただし、JavaScript の複数行フラグ (/m/) は常に期待どおりに機能するとは限りません。

HTML 文字列内の h1 タグ間のテキストを抽出することを目的とした次の正規表現を考えてみましょう:

この正規表現が文字列内で改行 (n) に遭遇すると、null を返す可能性があります。改行を削除するとこの問題は解決され、/m/ フラグが予期したとおりに動作していないことが示唆されます。

解決策: /s/ (Dotall) 修飾子

/m/ フラグは、. ではなく、^ および $ 文字の動作を変更します。したがって、問題は にあります。キャラクター。 JavaScript には、/.../s 修飾子 (dotall 修飾子とも呼ばれます) がありません。

回避策

これを軽減するために、JavaScript 開発者は文字を使用できます。クラス (例: s) とその否定 (S) を一緒にすると、 như sau:

これを元の正規表現に組み込むと次のようになります:

この式は正常に抽出されるはずです改行が存在する場合でも、HTML 文字列から目的のテキストを取得します。

ES2018 Update

ES2018 では、JavaScript に s (dotAll) フラグが導入されました。 。改行と一致します。これにより、回避策が必要なくなります。更新された正規表現は次のようになります。

この変更により、s フラグがサポートされている最新の JavaScript 環境との互換性が保証されます。

以上がJavaScript の複数行フラグ (/m/) が正規表現内の改行と一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。