为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript regex多行标记不起作用

JavaScript regex多行标记不起作用

ABOUTYOU 2019-07-04 15:18:55
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标志。我的大梁怎么了?
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

你在找/.../s修饰符,也称为多特改性剂。它会迫使点.来匹配换行符,不做默认情况下。

好消息是您可以通过使用字符类来绕过它。\s)及其否定(\S)在一起,就像这样:

[\s\S]

所以在你的例子中,regex会变成:

/<div class="box-content-5">[\s\S]*<h1>([^<]+?)<\/h1>/i

从ES 2018开始,JavaScript支持s(DotAll)标志,因此在现代环境中,您的正则表达式可以像您所写的那样,但是使用s标志在末尾(而不是mm变法^$工作,而不是.):

/<div class="box-content-5">.*<h1>([^<]+?)<\/h1>/is


查看完整回答
反对 回复 2019-07-04
?
米脂

TA贡献1836条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-07-04
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

[\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或更多次出现的[^]的非贪婪抓取。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 698 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信