【问题标题】: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>
并尝试使用非常基本的:<head(.*)\/head>/m 这不起作用。从字符串中删除换行符时它工作正常。不管是什么类型的换行符,有什么魔力?
【问题讨论】:
标签:
javascript
regex
replace
multiline
【解决方案1】:
问题在于点元字符与换行符不匹配。在大多数正则表达式风格中,您可以通过设置“DOTALL”或“单行”模式强制它匹配所有内容,但 JavaScript 不支持。相反,您必须将点替换为 确实 匹配所有内容的内容。最常见的成语是[\s\S](“任何空白字符或任何非空白字符”)。
【解决方案2】:
Alan 是对的,总而言之,使用 /<head([\s\S]*)\/head>/ 它应该可以满足您的需求。
我用于该工作的实际正则表达式是/<head>([\s\S]*?)<\/head>/,但差异可能无关紧要,因为它只是确保不存在与不应该存在的第二个头部标签的贪婪匹配:)