在 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中文網其他相關文章!