首頁 > web前端 > js教程 > 為什麼 JavaScript 的多行標誌 (/m/) 無法匹配正規表示式中的換行符?

為什麼 JavaScript 的多行標誌 (/m/) 無法匹配正規表示式中的換行符?

Mary-Kate Olsen
發布: 2024-11-08 08:00:02
原創
880 人瀏覽過

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

在 JavaScript 中使用正規表示式擷取多行文字

在 HTML 中,通常需要從標籤內擷取資訊。一種方法是透過正規表示式。但是,JavaScript 的多行標誌 (/m/) 可能不會總是按預期工作。

考慮以下正規表示式,其旨在提取HTML 字串中h1 標籤之間的文字:

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

如果此正規表示式在字串中遇到換行符( n),則可能傳回null。刪除換行符可以解決此問題,表示 /m/ 標誌的行為不符合預期。

解決方案:/s/(Dotall)修飾符

/m/ 標誌修改^ 和$ 字符的行為,而不是.因此,問題出在.特點。 JavaScript 不提供 /.../s 修飾符(也稱為 dotall 修飾符)。

解決方法

為了緩解這種情況,JavaScript 開發人員可以使用一個字元類別(例如 s)及其否定(S)在一起,như sau:

[\s\S]
登入後複製

將其合併到原始正規表示式中會產生以下結果:

/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
登入後複製

此表達式應成功從HTML 字串中提取所需的文本,字串即使存在換行符號也是如此。

ES2018更新

從 ES2018 開始,JavaScript 引入了 s (dotAll) 標誌,它允許 .匹配換行符。這消除了對解決方法的需求。更新後的正規表示式如下所示:

/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is
登入後複製

此修改可確保與支援 s 標誌的現代 JavaScript 環境相容。

以上是為什麼 JavaScript 的多行標誌 (/m/) 無法匹配正規表示式中的換行符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板