我编写了一个正则表达式来从 HTML 中获取字符串,但似乎多行标志不起作用。
这是我的模式,我想将文本输入h1
tag.
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi
m = html.search(pattern);
return m[1];
我创建了一个字符串来测试它。当字符串包含“\n”时,结果始终为空。如果我删除了所有的“\n”,它就会给我正确的结果,无论有没有/m
flag.
我的正则表达式有什么问题?
您正在寻找/.../s
修饰符,也称为dotall修饰符。它强制点.
也匹配换行符,它不做默认情况下。
The bad news is that it does not exist in JavaScript (it does as of ES2018, see below). The good news is that you can work around it by using a character class (e.g. \s
) and its negation (\S
) together, like this:
[\s\S]
所以在你的情况下,正则表达式将变成:
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
从 ES2018 开始,JavaScript 支持s
(dotAll) 标志,因此在现代环境中,您的正则表达式可以像您编写的那样,但带有s
标志在最后(而不是m
; m
改变方式^
and $
工作,不.
):
/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)