你这个需求逻辑有点复杂,用正则表达式个人感觉并不合适,用普通方法截取字符串处理好了。
下面是给你写的实际代码,可以保存为一个html文件直接打开看结果:
______________________________________________________________
<script language="javascript">
// 你提供的测试用例
var url = Array(
'http://a1.abc.com/fjsdfkjasdlfjalsd',
'http://uuu.abc.com/fjsdfkjasdl/123/342',
'http://www2.abc.com/fjsdfkjasdl/123/342',
'http://3www.abc.com/fjsdfkjasdl/123/342',
'3www.abc.com/fjsdfkjasdl/123/342',
'a1.abc.com',
'http://www.abc.com/.......',
'http://bbs.abc.com/.......',
'http://abc.com/.......',
'bbs.abc.com',
'abc.com'
);// 用来检查一个url匹配与否的函数
function get_prefix(url)
{
if (url.indexOf("http://") == 0)
url = url.substr(7);
var pos = url.indexOf("abc.com");
if (pos < 0)
return false;
else
{
var prefix = url.substr(0, pos - 1);
if (prefix == 'www' || prefix == 'bbs') return false;
return prefix;
}
}// 下面让我们开始检查并输出结果
var memo = "检查结果:\n"
for ( var i = 0; i < url.length; i ++)
{
var result = get_prefix(url[i]);
if (result)
{
memo += url[i] + ' 符合条件, 前缀为' + result + "\n";
}
else
{
memo += url[i] + ' 不符合条件' + "\n";
}
}
alert(memo);
</script>

解决方案 »

  1. 感谢hsboy兄关注,
    忘了说清楚,这个东东是用在ISAPI REWRITE里的,只能支持纯正则表达式,所以才会如此痛苦呀另外补充一个要求,当匹配时,要能分离出
    http://xxx.abc.com/ee/ee/eee/ee....
    中的二级域名xxx
    和后面的请求串/ee/ee/eee/ee....
      

  2. IIS 的 Rewrite 还是用 Apache 来改写好了。又快,又免费。
    你现在的要求没有规律。有规律才能写正则。
      

  3. 你的都是abc.com吗?如果是这样正则可以办到的
      

  4. <SCRIPT LANGUAGE="JavaScript">
    <!--
    var a = new Array();
    a[0] = "http://a1.abc.com/fjsdfkjasdlfjalsd";
    a[1] = "http://uuu.abc.com/fjsdfkjasdl/123/342";
    a[2] = "http://www2.abc.com/fjsdfkjasdl/123/342";
    a[3] = "http://3www.abc.com/fjsdfkjasdl/123/342";
    a[4] = "3www.abc.com/fjsdfkjasdl/123/342";
    a[5] = "a1.abc.com";a[6] = "http://www.abc.com/.......";
    a[7] = "http://bbs.abc.com/.......";
    a[8] = "http://abc.com/.......";
    a[9] = "bbs.abc.com";
    a[10] = "abc.com";var reg = /^(http:\/\/)?(www\.|bbs\.|)abc\.com/i;
    for(var i=0; i<a.length; i++)
    {
      alert(a[i] +"\n"+ !reg.test(a[i]));
    }
    //-->
    </SCRIPT>
      

  5. meizz(梅花雪) 大大,俺要的是“一个正则表达式”啊,其他程序代码都没法用的说
      

  6. 不好意思,是我误会 meizz 大大了!
      

  7. var reg = /^(http:\/\/)?(www\.|bbs\.|)abc\.com/i;  //那就用这一句吧,其它的不要
      

  8. 不过meizz大大提供的和俺要的还是有差距,结果正好相反的,
    要求是www.和bbs.不匹配,其他都匹配meizz大大是在JS里取反来解决的,可是俺只能用纯正则,没办法这样做的啊
    据说正则里利用(?!...)可以实现这样的功能,可是俺试了几个写法,都不对的说
      

  9. 没办法,这个东东是用在ISAPI REWRITE里的,只能支持纯正则表达式
      

  10. (http://)?\\w+(?<!(www|bbs)).abc.com/
      

  11. (http://)?\w+(?<!(www|bbs))\.abc\.com/
      

  12. var reg = /^(http:\/\/)?(www\.|bbs\.|)abc\.com/i;
    在这句上加个非吧
     /^(http:\/\/)?^(www|bbs|)\.abc\.com/
      

  13. sswater和 errorfun的方案已测试,
    errorfun的完全不能用sswater的有点问题,希望能改进一下
    awww.abc.com应该是要匹配的,结果没匹配上
    ddd.abc.com倒是匹配上了,不过没有把ddd截取出来
      

  14. 附正则测试工具
    http://www.helicontech.com/download/rxtest.zip
      

  15. (http://)?(\w+)(?<!\b(www|bbs))\.abc\.com/或者(http://)?(\w+)(?<!(?<!\w)(www|bbs))\.abc\.com/
      

  16. <SCRIPT LANGUAGE="JavaScript">
    <!--
    var a = new Array();
    a[0] = "http://a1.abc.com/fjsdfkjasdlfjalsd";
    a[1] = "http://uuu.abc.com/fjsdfkjasdl/123/342";
    a[2] = "http://www2.abc.com/fjsdfkjasdl/123/342";
    a[3] = "http://3www.abc.com/fjsdfkjasdl/123/342";
    a[4] = "3www.abc.com/fjsdfkjasdl/123/342";
    a[5] = "a1.abc.com";a[6] = "http://www.abc.com/.......";
    a[7] = "http://bbs.abc.com/.......";
    a[8] = "http://abc.com/.......";
    a[9] = "bbs.abc.com";
    a[10] = "abc.com";var reg = /^(http:\/\/)?(?!www\.|bbs\.)(\w+\.)abc\.com/i;
    for(var i=0; i<a.length; i++)
    {
      alert(a[i] +"\n"+ reg.test(a[i]));
    }
    //-->
    </SCRIPT>
      

类似问题 »