JavaScript正则表达式多行标志不起作用
我写了一个正则表达式来从HTML提取字符串,但是多行标志似乎不起作用。
这是我的模式,我想在h1
标签中获取文本。
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mim = 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