2014-04-12 58 views
0

我试图删除所有样式规则,例如<style>blablabla</style>,包括<style>标记。 我使用下面的脚本来完成这个Javascript正则表达式 - 获取两次匹配之间的字符串,多次

var text = '< style type= "text/css" > hello1 </sTyle > 
       some text 
       < style type= "text/css" > hello2 </sTyle >'; 

    var regX = /< *style .*>([\s\S]*?)< *\/ *style *>/ig; 
    text.replace(regX, ""); 

但它删除整个文本,包括两个样式定义之间的“一些文本”。我想在这个例子中保留“一些文本”。

回答

1

的问题是在这里

< *style .*> 

.*匹配一切。

您正则表达式更改为

/< *style .*?>([\s\S]*?)< *\/ *style *>/ig 

/< *style [^>]*>([\s\S]*?)< *\/ *style *>/ig 

但请注意,目前您正则表达式错过的情况下,例如

<style></style> 

您可以考虑使用实际的HTML解析器。

1

最好在RegEx中避免这个.*贪婪的家伙。尝试是这样的:

text.replace(/< *style[\w"= \/]*>[\w ]*<[ \/]*style *>/ig, '')

DEMO

相关问题