Javascript正则表达式替换标记之间的文本?

时间:2011-02-07 15:40:38

标签: javascript regex

我在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 -->

任何想法都会非常感谢

3 个答案:

答案 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>