Javascript正则表达式 - 多次在两次匹配之间获取字符串

时间:2014-04-12 16:11:15

标签: javascript regex

我正在尝试删除所有样式规则,例如此<style>blablabla</style>,包括<style>标记。 我正在使用以下脚本来完成此操作

  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, "");

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

2 个答案:

答案 0 :(得分:1)

问题出在这里

< *style .*>

.*匹配所有内容。

将正则表达式更改为

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

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

请注意,目前您的正则表达式错过了案例,例如

<style></style>

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

答案 1 :(得分:1)

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

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

DEMO