原始文本:
www.aaa.com   fsdfsdf  www.bbb.com dasdad  www.ccc.com  sadasdasda  www.ddd.com要求匹配 不包含www.bbb.com的 www.*com 两次以上,, 即匹配示例中的www.ccc.com  sadasdasda  www.ddd.com段....我的正则是: (?:www\.(?!bbb)\.com){2,}
失败了...貌似套小括号不管用...

解决方案 »

  1.   

    没明白你所谓的 “两次以上” 是什么意思 
    至少匹配不包含www.bbb.com 的 www.*com应该这样来写:www\.(?!bbb)[^.]+\.com
      

  2.   

    “两次以上”意思是连续出现两个 www.xxx.com ,,并且 xxx 都不是bbb...并且要求用最小化(非贪婪)匹配,,,比如www.xxx.com adas www.bbb.com sdsd www.xxx.com字符串中间有www.bbb.com,,这个字符串应该是不被这个正则匹配的....我要用来在某个特定的网站(bbb.com)屏蔽广告...如果内容是一个或者连续的www.bbb.com.* 的话就可能是引用链接或者本站图片...如果不是bbb.com的本站地址并且在同一帖里出现两次或两次以上就被识别成外链广告...
      

  3.   

    (?<=www\.bbb\.com)((?!www\.bbb\.com).)+
      

  4.   

    楼上的正则没有体现出"两次以上",,而且如果原始文本是 www.bbb.com dasdad 的话...仍然可以匹配到 " dasdad" 字段...也就是说只要字段前边有bbb.com的话后边任何字符都会被匹配到...你这个就变成所有文本通杀了...不符合我的要求...我的意思是匹配 www\.(?!bbb)+?\.com 两次或两次以上...不要用match和arguments等方法...因为我这个正则要放在一个类似 /免费|兼职|诚聘|(?:www\.(?!bbb)+?\.com){2,}/i 这样的表达式里...所以要求只用正则表达式本身匹配www.xxx.com两次以上...
      

  5.   

    还有就是js正则不支持反向肯(否)定预查吧? 你那个(?<=)是perl|pcre正则表达式...不知道js是不是支持...
      

  6.   

    简单点说: 
    (?:www\.bbb\.com.*?){2,}
    可以匹配到
    www.aaa.com fsdfsdf www.bbb.com df www.bbb.com  dasdad www.ccc.com sadasdasda www.ddd.com
    中的 "www.bbb.com df www.bbb.com"但是我想用:
    (?:www\.(?!bbb)\.com.*?){2,}
    匹配到
    www.aaa.com fsdfsdf www.bbb.com df www.bbb.com  dasdad www.ccc.com sadasdasda www.ddd.com
    中的 "www.ccc.com sadasdasda www.ddd.com"这个正则中的 (?!bbb) 是无效的...我不知道这部分应该怎么写...
      

  7.   

    楼上这个肯定不行...[]里是字符集...照你这样只需要(www\.[^b]+\.com(\s*\w*\s*)+){2,}就可以匹配了...在你这个字符集 [] 里的括号 () 并不表示"获取匹配"或者"非获取匹配",,只代表左小括号和右小括号两个字符而已...比如 [(bcd)] 是可以匹配到 cddb 这样的字符的...并不符合我的本意...
      

  8.   

    连续2个网址,同时不包含www.bbb.com是吧~~~!
    看你的表述真累。稍等下我试试看
      

  9.   

    var str = 'www.aaa.com fsdfsdf www.bbb.com dasdad www.ccc.com sadasdasda www.ddd.com';
    var reg = /(www\.(?!bbb\.)[^.]+\.com([^w]|w(?!w{2}))*){2}/ig;
    alert(str.match(reg));
      

  10.   

    楼上在负向预查后跟了字符集之后能用了...但是类似 "www.aaa.com fsdfsdf www.bbb.333.com" 这样的字符串,里边没有www.bbb.com,而你的正则是匹配不到的...还能不能再完善下...谢谢啊...我现在写了一个,,就是有点乱...而且还是有bug
    (?:www\.(?!bbb\.(?:com|cn)).+?\.(?:com|cn|org|cc).*?){2}在遇到"www.aaa.com fsdfsdf www.bbb.com.333.com dasdad www.ccc.com sadasdasda www.ddd.com"的时候字符串里的欺骗性链接"www.bbb.com.333.com"不能被匹配到...
    也就是说如果字符串是:
    www.aaa.com fsdfsdf www.bbb.com.333.com
    的时候,按说应该是要被正则匹配的,,但是按目前的写法匹配不到...
    还是被那个(?:www\.(?!bbb)\.com)的问题困扰...
      

  11.   

    var str = 'www.aaa.com fsdfsdf www.bbb.com.333.com dasdad www.ccc.com sadasdasda www.ddd.com';
    var reg = /(www\.(?!bbb\.com\s)[^.]+?\.com([^w]|w(?!w{2}))*){2}/ig;
    alert(str.match(reg));不过我觉得,如果说匹配完全正确的url情况,情景比较复杂,比如你会在之后遇到很多类似的bug。
    我给你写的也是基于目前的情况写的。
    我看你之前的回复,你的资料查的比较多,如果往深一点层次里研究下正则,你应该能够定制出适合自己用的正则。论坛里的回复只能解决你目前的问题,但是这样的问题是延续不断的。
      

  12.   

    现在我发现我的想法有一个逻辑问题: 
    'bbb\.123' != 'bbb'
    但是 (?!bbb) 能匹配 'bbb\.123' (匹配到了'\.123')
    所以就算能用 (?:www\.(?!bbb)\.com) 这样的语法也基本无解...
    睡觉去...明天再鼓捣...