简体   繁体   中英

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM