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

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

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

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

m = html.search(pattern);

return m[1];

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

我的正则表达式怎么了?

回答:

您正在寻找/.../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

以上是 JavaScript正则表达式多行标志不起作用 的全部内容, 来源链接: utcz.com/qa/411294.html

回到顶部