我在html中有一个开始和结束标记,我想用其他一些html替换这些标记之间的html。下面的表达似乎不起作用......
var myRegExp = new RegExp("<!-- " + "START IMPORTED HEAD.*?<!-- " + "END IMPORTED HEAD -->", "gi");
sHtmlContent = sHtmlContent.replace(myRegExp, "<!-- " + "INSERT_HEADER -->");
下面的是doc.
中出现的html块的示例<!-- START IMPORTED HEAD -->
<style type="text/css">
input[type=button]
{
padding-bottom: 3px;
}
</style>
<!-- END IMPORTED HEAD -->
任何想法都会非常感谢
答案 0 :(得分:2)
问题是您的文档中的换行符。 Javascript不支持开箱即用的多行(点匹配全部)匹配。您可以先删除换行符,也可以使用XRegexp
这样的扩展名请参阅此处:regexpal,然后点击Dot匹配所有。
答案 1 :(得分:2)
操作DOM要好得多,但前提是你有浏览器。如果您正在使用服务器端JavaScript(例如JS ASP),这里可以完全按照您的要求进行操作:
var html = '<!-- START IMPORTED HEAD -->\n<style type="text/css">\n input[type=button]\n {\n padding-bottom: 3px;\n }\n</style>\n<!-- END IMPORTED HEAD -->';
var re = new RegExp("<!-- " + "START IMPORTED HEAD[\\d\\D]*?<!-- " + "END IMPORTED HEAD -->", "gi");
html.replace(re, "<!-- " + "INSERT_HEADER -->");
// <!-- INSERT_HEADER -->
你的问题是在JS中.
字符与换行符不匹配;使用[\d\D]
字符类代替匹配所有字符。
答案 2 :(得分:1)
使用DOM是解决问题的更强大的解决方案。不要使用评论标记,只需将HTML部分放在具有已知ID的div
中:
<div id="foo">Original things</div>
使用jQuery,您可以在一行中进行替换:
$('div#foo').html('Replaced things')
这会将div的内容更改为:
<div id="foo">Replaced things</div>