【问题标题】:Javascript regular expression string-replacement of multi-line stringsJavascript正则表达式字符串替换多行字符串
【发布时间】:2011-01-19 11:10:31
【问题描述】:

使用 JavaScript 正则表达式替换,尝试替换 <head></head> 标记之间的任何内容,以便:

<head>
   Multiline foo
</head>
<body>
  Multi line bar
</body>

被替换成:

<body>
  Multi line bar
</body>

并尝试使用非常基本的:&lt;head(.*)\/head&gt;/m 这不起作用。从字符串中删除换行符时它工作正常。不管是什么类型的换行符,有什么魔力?

【问题讨论】:

标签: javascript regex replace multiline


【解决方案1】:

问题在于点元字符与换行符不匹配。在大多数正则表达式风格中,您可以通过设置“DOTALL”或“单行”模式强制它匹配所有内容,但 JavaScript 不支持。相反,您必须将点替换为 确实 匹配所有内容的内容。最常见的成语是[\s\S](“任何空白字符或任何空白字符”)。

【讨论】:

  • 你还有[\d\D][\w\W]! :D
【解决方案2】:

Alan 是对的,总而言之,使用 /&lt;head([\s\S]*)\/head&gt;/ 它应该可以满足您的需求。

我用于该工作的实际正则表达式是/&lt;head&gt;([\s\S]*?)&lt;\/head&gt;/,但差异可能无关紧要,因为它只是确保不存在与不应该存在的第二个头部标签的贪婪匹配:)

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多