先上代码,再说问题function regExHTML(h){
var re = new RegExp("<div[^>]*class=\"elist\"[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>|.)*?</div>|.)*?</div>");
var r = re.exec(h);
alert(r);
}这个正则是匹配嵌套div,我在RegexMatchTracer工具和http://tools.netshiftmedia.com/regexlibrary/测试都没问题,都能成功匹配,但是放到JS中,死活就是匹配失败,尝试用match、exec、test都不能匹配,也尝试用Perl风格写,但变量r始终是null,非常郁闷,请问这个正则哪里有问题?我是正则新手

解决方案 »

  1.   

    var re = new RegExp("<div[^>]*class=\"elist\"[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>|.)*?</div>|.)*?</div>");换成var re = /<div[^>]*class=\"elist\"[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>(<div[^>]*>.*?</div>|.)*?</div>|.)*?</div>|.)*?</div>|.)*?</div>/g;试试
      

  2.   

    问题已解决,谢谢楼上2位。不是JS和正则的问题,是返回值问题,因变量h是网页的源码,在asp服务端中输出是不带换行的,但是用ajax获取到的却是带换行,这个问题折腾了一下午。所以把换行符替换掉就行了。
    加一句:var h = h.replace(/\n|\r|(\r\n)/g, "");
    问题解决。