<html>
<head>
</head>
<body>
<script language="JavaScript">
var a='<div id="siteDataCount"><div></div><div><span class="cs">123</span></div></div><div><span class="cs">456</span></div>'
alert('')
alert(a.match(/<[^>]*? class=\"cs\">[^<]*?<\/[^>]*?>/g).length)
alert(a.match(/<[^>]*? class=\"cs\">[^<]*?<\/[^>]*?>/g)[0])
alert(a.match(/<[^>]*? class=\"cs\">[^<]*?<\/[^>]*?>/g)[1])
//alert(/<[^>]*? class=\"cs\">[^<]*?<\/[^>]*?>/.match(a))
</script></body>
</html>

解决方案 »

  1.   

    这个正则现在最麻烦的就是 循环嵌套的问题,在网上查了下资料,一直没找到好的解决方法~~
    实际上CSS定义可能比这个还复杂,如 #siteDataCount span.cs{}等,
     mingxuan3000(铭轩) 的方法只能得出带有 class="cs" 的HTML元素,而没有限定是在 元素siteDataCount 里的标签~~  不过也挺感谢的~~
      

  2.   

    如果HTML标记都是匹配的的还好办...
    要是有不匹配的就糟了...
    我觉得那样就不可能用正则来匹配了...
    所以如果你想要它能对付这种情况你还是想想怎样用上DOM吧...
      

  3.   

    不过作为大脑体操, 思考下如果HTML格式良好该怎么用正则匹配倒是不错...
    想ing...
      

  4.   

    使用DOC也考虑过,只是觉得当遇到大量需要查找的CSS样式时,函数递归可能会耗费大量的计算时间~~ 算法上也比较复杂,所以想试着用正则来解决一下这个问题~~~
      

  5.   

    匹配以后给这个元素加上一个亮色的显示边框,以提示用户这个CSS在哪几个地方用到~~~
    匹配后可能的样式为:
    <div id="siteDataCount">
    <div></div>
    <div>
    <span class="cs" style="加上边框"></span>
    </div>
    </div>
    <div><span class="cs"></span></div>
      

  6.   

    用dom吧
    <html>
    <head>
    </head>
    <body>
    <div id="siteDataCount">
    <div></div>
    <div>
    <span class="cs">123</span>
    </div>
    </div>
    <div><span class="cs">456</span></div>
    <script language="JavaScript">
    alert('')
    //alert(document.getElementById("siteDataCount").innerHTML.toString().match(/<[^>]*? class=\"cs\">[^<]*?<\/[^>]*?>/g)[0])var bb=document.getElementsByTagName("span")
    alert('')
    for(var i=0;i<bb.length;i++){
    //alert('')
       alert(bb[i].className)
    }
    </script></body>
    </html>正则不好匹配
      

  7.   

    先document.getElementById("siteDataCount")然后对他的childNodes进行上面的循环判断
      

  8.   

    正则太复杂了
    下面这样也不行
    document.getElementById("siteDataCount").innerHTML.toString().match(/<[^>]*? class=\"cs\">[^<]*?<\/[^>]*?>/g)[0]class="cs"里面可能有如下的情况,太复杂了
    <span class="cs"><div>123</div><span> 123</span></span>
      

  9.   

    使用DOM好像就只能用递归实现吧... 因为是要知道在一个页面上有哪几个地方用到过一个CSS,需要遍历Document文档的所有结点,需找到多个CSS,可能的一种情况如下:CSS:
    #siteDataCount .cs,
    div#Temp1 ul li.cur em,
    table.desc .module span
    {}而class也可能有多个CSS,<span class="c2 cs s1"></span>,通常大型网站的网页都比较大,解析一组CSS可能耗费的时间比较长~~
      

  10.   

    相对来说正则最难的地方就是要正确找到 标签的嵌套匹配,这个解决了,我想应该就比较容易了~~ 在最后一层里可以忽略掉他里面的内容,
    如:
    <span class="cs"><div>123</div><span> 123</span></span>
    正则:<span class="cs">(.|\n)*
    只要确认这个标签是在 siteDataCount 下我就可以实行替换了,<span class="cs" style="边框样式">
      

  11.   

    先document.getElementById("siteDataCount").innerHTML.toString()
    再对上面的正则
      

  12.   

    不行的,实际上有这种情况:
    <div id="siteDataCount"><span class="cs">ATEXT</span><div></div><div>
    <span class="cs">BTEXT</span><div></div>
    那上面那种解析就不是只限定在siteDataCount 里的cs了,外面那层BTEXT的也被包函进去了~~
      

  13.   

    看错了,主要是因为 siteDataCount 这个是不确定的,这只是他其中的一种方式,
    有可能是 .siteDataCount .cs,那这时就不能用 getElementById了,<div class='siteDataCount'><span class="cs"></span></div><span class='cs'></span>如果碰到是单一的没有嵌套的标签到是可以这样写正则: 
    <div class='siteDataCount'><[^>]*? class=\'cs\'>(.|\n)*?<\/span></div>,可如果里面有嵌套的标签的话,如<div class='siteDataCount'><div></div><span class="cs"></span></div>,就不能正确匹配到了~
      

  14.   

    用正则的嵌套表达式我写过了。在别的软件里使用正常。但在ie下嵌套超过3层就很容易引起ie崩溃。还是算了吧。既然是web,还是用dom方便