Javascript regular expression string-replacement of multi-line strings
With JavaScript regular expression replace, trying to replace anything between <head>
and </head>
tags so that:
<head>
Multiline foo
</head>
<body>
Multi line bar
</body>
gets replaced into:
<body>
Multi line bar
</body>
and trying with the very basic: <head(.*)\/head>/m
which doesn't work. It works fine when line breaks are removed from string. No matter what type of line breaks,开发者_JAVA技巧 what's the magic?
The problem is that the dot metacharacter doesn't match newlines. In most regex flavors you can force it to match everything by setting "DOTALL" or "single-line" mode, but JavaScript doesn't support that. Instead, you have to replace the dot with something that does match everything. The most common idiom is [\s\S]
("any whitespace character or any character that's not whitespace").
Alan is right, to summarize, use /<head([\s\S]*)\/head>/
and it should do what you wish.
The actual regex i'd use for the job is /<head>([\s\S]*?)<\/head>/
but the difference probably won't matter, since it just assures there is no greedy matching with a 2nd head tag that should never be there :)
精彩评论