开发者

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 :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜