Javascript正则表达式字符串替换多行字符串

时间:2011-01-19 11:10:31

标签: javascript regex replace multiline

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

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

被替换为:

<body>
  Multi line bar
</body>

尝试使用非常基本的:<head(.*)\/head>/m,但不起作用。当从字符串中删除换行符时,它工作正常。无论什么类型的换行,神奇的是什么?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

总结一下,艾伦是对的,使用/<head([\s\S]*)\/head>/并且应该按照自己的意愿行事。

我用于该作业的实际正则表达式是/<head>([\s\S]*?)<\/head>/,但差异可能无关紧要,因为它只是确保没有贪婪匹配的第二个头标记永远不应该存在:)< / p>

相关问题