我有一个变量,它包含页面的整个html作为字符串值:
<html><head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="foo.js"></script>
<link rel="stylesheet" href="foo.css">
</head>
<body>
<div id="wrapper">
<!-- MY PANEL -->
<div id="edit-area"></div>
<div id="my-panel">
<ul class="menu menu-top">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<ul class="menu menu-bottom">
<li>a</li>
</ul>
<pre id="code" contenteditable="true"></pre>
</div>
<!-- END MY PANEL -->
<div id="original-content">
<div style="border: 1px solid red; width: 100px; height: 100px"></div>
</div>
</div>
</body></html>
我需要将此值更改为除注释之间的内容之外的所有内容。我需要这个:
<html><head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script src="foo.js"></script>
<link rel="stylesheet" href="foo.css">
</head>
<body>
<div id="wrapper">
<div id="original-content">
<div style="border: 1px solid red; width: 100px; height: 100px"></div>
</div>
</div>
</body></html>
我试过了:
var regex = /<!-- MY PANEL -->.+?<!-- END MY PANEL -->/;
alert(my_variable.replace(regex, ''));
但它只是提醒整个值,注释之间的内容完整且未删除。
实现这一目标的正确方法是什么?
答案 0 :(得分:1)
result = subject.replace(/<!-- MY PANEL -->[\s\S]+?<!-- END MY PANEL -->/g, "");
如果您需要更多帮助,请告诉我们
答案 1 :(得分:1)
.
与换行符不匹配,JavaScript没有像PHP那样的“dotall”选项。
要解决此问题,请使用完成自身的字符类,例如[\d\D]
表示“任何数字或任何非数字”,而不是.
。
结果:regex = /<!-- MY PANEL -->[\d\D]+?<!-- END MY PANEL -->/;
答案 2 :(得分:0)
.
永远不会匹配换行符。您必须使用一些与所有内容匹配的其他模式,例如(.|[\r\n])*?
或[\s\S]*?
。
答案 3 :(得分:0)
根据此regExr(http://regexr.com?30dpi),这有效:
<!-- MY PANEL -->(\s*.*?)*<!-- END MY PANEL -->
但与正则表达式一样,这可能不是最甜蜜的。