情况是这样的。现在需要使用js在整个页面中使用正则去匹配出特定的标签。该标签有多个。且不存在id等属性,是自己写的标签。具体实例如下:
<s>
<type>logo</type>
<src></src>
<hight></hight>
</s>
====================
<s>
<type>logo</type>
<src></src>
<hight></hight>
</s>
====================
<s>
<type>logo</type>
<src></src>
<hight></hight>
</s>
一开始我写的表达式是:<s>.*<\/s>这样当然有个很明显的问题,它会从第一个“<s>”开视匹配到最后一个“<\s>”。
然后我又试了<s>[^m][^a][^r][^k][^s]*<\/s>杯具的发现这里面不能出现m a r k s这几个字母了……晕!到现在问题是怎么匹配出单个的s呢?我的思路是去匹配s的开始和结束,并且是开始和结束之间不包括字符串s。但是js的正则里怎么去排除匹配字符串呢?
我试了
<s>(?!s)*</s>结果啥也不出来了……  现在求助啊,谁能告诉我怎么解决这个问题啊?

解决方案 »

  1.   

    /<s>(?:(?!<\/?s>).)*<\/s>/gi
      

  2.   

    有换行, . 换成 [\s\S]
    /<s>(?:(?!<\/?s>)[\s\S])*<\/s>/gi
      

  3.   

    var str = "<s>\n<type>logo</type>\n<src></src>\n<hight></hight>\n</s>\n====================\n<s>\n<type>logo</type>\n<src></src>\n<hight></hight>\n</s>\n====================\n<s>\n<type>logo</type>\n<src></src>\n<hight></hight>\n</s>";
    alert(str.replace(/<s>(?:(?!<\/?s>)[\s\S])*<\/s>/gi, ""));
      

  4.   

    /<(s)>[\s\S]*?<\/\1>/ig
    你可以把()内的换成别的标签名