一尘不染

JavaScript正则表达式多行标志不起作用

javascript

我写了一个正则表达式来从HTML提取字符串,但是多行标志似乎不起作用。

这是我的模式,我想在h1标签中获取文本。

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

我创建了一个字符串来测试它。当字符串包含“ \ n”时,结果始终为null。如果删除所有的“ \ n”,无论有没有/m标志,它都会给我正确的结果。

我的正则表达式怎么了?


阅读 426

收藏
2020-04-25

共1个答案

一尘不染

您正在寻找/.../s修饰符,也称为 dotall 修饰符。它将强制点.也匹配换行符,默认情况下 不这样做

坏消息是它 在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
2020-04-25