当前位置: 首页 > 面试题库 >

JavaScript正则表达式多行标志不起作用

汤才捷
2023-03-14
问题内容

我写了一个正则表达式来从HTML提取字符串,但是多行标志似乎不起作用。

这是我的模式,我想在h1标签中获取文本。

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

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

我的正则表达式怎么了?


问题答案:

您正在寻找/.../s修饰符,也称为 dotall 修饰符。它将强制点.也匹配换行符,默认情况下 不这样做

坏消息是它 在JavaScript中不存在 (自ES2018起,请参见下文)
。好消息是,您可以通过一起使用字符类(例如\s)及其否定符()来解决它\S,如下所示:

[\s\S]

因此,在您的情况下,正则表达式将变为:

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

从ES2018开始,JavaScript支持s(dotAll)标志,因此在现代环境中,您的正则表达式可以像您编写时一样,但s结尾处带有标志(而不是m;
m更改方式^$工作方式,而不是.):

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


 类似资料:
  • 问题内容: 我正在做一个小的javascript方法,该方法会接收到一个点列表,并且我必须阅读这些点才能在Google地图中创建多边形。 我在表格上收到这些要点: (lat,long),(lat,long),(lat,long) 因此,我完成了以下正则表达式: 我已经使用RegexPal和收到的确切数据进行了测试: 并且它可以正常工作,所以为什么当我在JavaScript中添加此代码后,结果中会收

  • 问题内容: 我有一个正则表达式: 这应该与该字符串匹配并返回三个捕获(根据Rubular) 这是我的代码: 当有三个时,此打印输出1(组),所以我只能这样做,只会返回32。 问题答案: 调用查找匹配的 下一个 实例,如果没有更多实例,则返回false。尝试调用它三次,看看是否有所有预期的组。 为了澄清,正在尝试 在正则表达式中 找到第一个组 表达式 。您的正则表达式中只有一个这样的组表达式,因此永

  • 我想验证输入的代码是否是HTML代码(必须以<代码> 我试着这么做 但是我有一个问题需要在代码中做一个\n,我需要验证第一个和结束标签(=

  • 问题内容: 我正在使用此正则表达式获取文件中标签的内容。 这导致v8引擎无限期挂起。 现在,如果我使用,一切都很好。 有人知道第一个为什么花太长时间吗? 问题答案: 灾难性地回溯了最后一个结束标记之后出现的长序列空格。考虑主题字符串以100个空格结尾的情况。首先,将它们与交替项左侧的匹配。失败是因为没有结束标记,因此它尝试将最后一个字符与代替匹配。这也失败了,因此它尝试将倒数第二个空格作为a匹配最

  • 问题内容: 我和我的朋友正在尝试创建一种算法来计算输入的数字之后不会重复的数字(例如)。 感兴趣的代码是: 由于某种原因,即使将其设置为,也将其设置为。每个输出的结果将与输入具有相同的值。 这是什么问题,我们将如何更改逻辑,以便当数字中的数字重复时,检查器返回假? 问题答案: 考虑这些行 有一些问题。我认为您缺少牙套。和你忘了更新checker的时候matcher.find()是假的。我建议你改为

  • 我要匹配以下字符串: 包含unicode空格(不要问我为什么)<代码>/,\s*,/u在regex101中工作正常。 但是(?u),\s*,“在clojure中不起作用: 为什么会失败?