我写了一个正则表达式来从HTML提取字符串,但是多行标志似乎不起作用。
这是我的模式,我想在h1标签中获取文本。
h1
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi m = html.search(pattern); return m[1];
我创建了一个字符串来测试它。当字符串包含“ \ n”时,结果始终为null。如果删除所有的“ \ n”,无论有没有/m标志,它都会给我正确的结果。
/m
我的正则表达式怎么了?
您正在寻找/.../s修饰符,也称为 dotall 修饰符。它将强制点.也匹配换行符,默认情况下 不这样做 。
/.../s
.
坏消息是它 在JavaScript中不存在 (自ES2018起,请参见下文) 。好消息是,您可以通过一起使用字符类(例如\s)及其否定符()来解决它\S,如下所示:
\s
\S
[\s\S]
因此,在您的情况下,正则表达式将变为:
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
从ES2018开始,JavaScript支持s(dotAll)标志,因此在现代环境中,您的正则表达式可以像您编写时一样,但s结尾处带有标志(而不是m; m更改方式^和$工作方式,而不是.):
s
m
^
$
/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is