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