JavaScript的正则表达式多行标志不起作用
我写了一个正则表达式来从HTML中获取字符串,但似乎多行标志不起作用。
这是我的模式,我想获得在h1标签的文字。
var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi m = html.search(pattern); return m[1];
我创建了一个字符串来测试它。 当字符串包含“\ n”时,结果始终为空。 如果我删除所有的“\ n”,它给了我正确的结果,无论有没有/ m标志。
我的正则表达式有什么问题?
您正在查找/.../s
修饰符,也称为dotall修饰符。 它迫使点.
也匹配换行符,这是默认情况下不会执行的。
坏消息是它不存在于Javascript中。 好消息是你可以通过使用一个字符类(例如\s
)和它的否定( \S
)来解决它,就像这样:
[\s\S]
所以在你的情况下,正则表达式将变成:
/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i
你想要s
(dotall)修饰符,这显然不存在于Javascript中 – 你可以替换.
与@molf建议的[\ s \ S]一样。 m
(多行)修饰符使^和$匹配行而不是整个字符串。
dotall修饰符可能会很快将其转换为JavaScript。
https://github.com/tc39/proposal-regexp-dotall-flag
也许在ECMAScript 2018中,看到它在TC39过程的第三阶段。