2011-02-07 84 views
0

我在html中有一个开始和结束标记,我想用其他一些html替换这些标记之间的html。下面的表达式似乎不起作用...Javascript正则表达式替换标记之间的文本?

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

任何想法将是巨大的感谢

+6

你应该为此使用DOM操作。不知道DOM是什么?去[了解它](http://www.w3schools.com/htmldom/default.asp)!现在! ... 你回来了?对于如此简单的事情,使用DOM似乎有很多工作要做?去学习[jQuery](http://jquery.com/)! ;) – 2011-02-07 15:42:57

+0

好的你会如何建议我通过DOM做到这一点?感谢很大的帮助 – keyoke 2011-02-07 15:45:46

+0

寻找一个基于正则表达式的解决方案的欢呼声 – keyoke 2011-02-07 15:50:58

回答

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

的问题是在您的文档的换行。 Javascript不支持多行(全点匹配)匹配开箱即用。您可以先删除换行符,或者使用扩展名XRegexp

请参阅:regexpal然后单击Dot匹配全部。

+0

感谢这听起来像是努力 – keyoke 2011-02-07 15:59:06

1

使用DOM是一个更强大的解决方案,以解决您的问题。除了使用注释标记的,只是放置一个div内部的HTML第一个已知的ID:

<div id="foo">Original things</div> 

使用jQuery,你可以做替换在单行:

$('div#foo').html('Replaced things') 

这将改变div的内容分为:

<div id="foo">Replaced things</div>