正则表达式匹配在带双引号的字符串上失败

时间:2017-04-03 13:09:16

标签: javascript regex

我有一个动态来自另一个文档的字符串,如下所示;

T

我使用此字符串如下;

"<!DOCTYPE html>
<html dir="ltr"><head><title>Preview</title></head>
<body>
<p>test</p>
<p><img alt="" height="299" src="http://172.0.0.1/Administration/YDImages/cap.JPG" width="696"></p>
</body>
</html>"

我发现var html = stringAbove; var reg = html.match(/<body[^>]*>(.*)<\/body>/); var newDocument = "<p>My new Texts and styles</p>"; //replace inside body with my new code var newer = html.replace(reg[1],newDocument); doc.write(newer); 返回html.match如果html变量中的字符串如上所述,同时调试以了解如何使这个正则表达式适用于开发人员工具,我&#39 ; ve将字符串的双引号的起始和结尾更改为单引号,因此它起作用。然后我将所有双引号更改为单引号并尝试正则表达式函数,但它不起作用。请帮助我正确使用这个正则表达式。

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

/<body>(.*?)(?=<\/body>)/

这将从<body>开始匹配,直到后跟</body>的字符。

此外,由于您正在接收HTMLString,因此您将不会有多个body,因此使用match[0]

var s = '<!DOCTYPE html><html dir="ltr"><head><title>Preview</title></head><body><p>test</p><p><img alt="" height="299" src="http://172.0.0.1/Administration/YDImages/cap.JPG" width="696"></p></body></html>';

var regex = /<body>(.*?)(?=<\/body>)/;

var match = s.match(regex)
console.log(match)
var html = match[0].replace("<body>", "")

document.querySelector('.content').innerHTML = html
img{
  border: 1px solid gray;
}
<div class="content"></div>