JavaScript regex多行标记不起作用

JavaScript regex多行标记不起作用

我编写了一个regex从html中获取字符串,但多行标志似乎不起作用。

这是我的模式,我想得到H1标签中的文本。

var pattern= /<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/mi
m = html.search(pattern);return m[1];

我创建了一个字符串来测试它。当字符串包含“\n”时,结果总是为空。如果我删除所有的“\n”,它给了我正确的结果,无论是否有/m标志。

我的大梁怎么了?


ABOUTYOU
浏览 700回答 3
3回答

凤凰求蛊

你在找/.../s修饰符,也称为多特改性剂。它会迫使点.来匹配换行符,不做默认情况下。好消息是您可以通过使用字符类来绕过它。\s)及其否定(\S)在一起,就像这样:[\s\S]所以在你的例子中,regex会变成:/<div&nbsp;class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i从ES 2018开始,JavaScript支持s(DotAll)标志,因此在现代环境中,您的正则表达式可以像您所写的那样,但是使用s标志在末尾(而不是m;&nbsp;m变法^和$工作,而不是.):/<div&nbsp;class="box-content-5">.*<h1>([^<]+?)<\/h1>/is

米脂

你想要s(Doall)修饰符,它显然不存在于Javascript中-您可以替换.与@Molf建议的[\s\S]一起使用。这个m(多行)修饰符使^和$匹配行,而不是整个字符串。

明月笑刀无情

[\s\S]在NodeJS 6.11.3没有为我工作。基于RegExp文档,它说要用[^]这对我确实有用。(小数点)匹配除行结束符以外的任何单个字符:\n、\r、\u 2028或\u 2029。在一个字符集中,这个点失去了它的特殊意义,并匹配一个文字点。注意,m多行标志不会改变点的行为。因此,要匹配跨越多行的模式,可以使用字符集[^](当然,如果不是指旧版本的IE),它将匹配任何字符,包括换行符。例如:/This is on line 1[^]*?This is on line 3/m在哪里*?是0或更多次出现的[^]的非贪婪抓取。
打开App,查看更多内容
随时随地看视频慕课网APP