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过程的第三阶段。