与正则表达式斗争改变子域和subsubdomain

时间:2011-09-03 00:57:39

标签: javascript regex dns

我从另一篇文章中得到了这个:

host = ".mylocal.com";
var reg = new RegExp('^https?://([^.]*' + host + ')');
console.log(reg.test('http://www.mylocal.com/'));

但它只能与www.mylocal.com,whatever.mylocal.com匹配,但不能与两个级别匹配,例如dev.www.mylocal.com

我尝试写别的东西,却无法检查子子。甚至降低3,4级。 :(我该怎么写呢?

所以,我想要实现的是:

.local.com
will match:
www.local.com
dev.www.local.com
abc.dev.abc.local.com

and 
www.local.com
will only match 
www.local.com
NOT dev.www.local.com

:)更明确

2 个答案:

答案 0 :(得分:1)

基本问题是,如果hosthost开头,您希望匹配所有类型的前缀,后跟.。但是如果没有,你想单独匹配host。这可以通过前瞻断言来完成,但是因为无论如何你都在构造正则表达式,所以根据具体情况构造它会更加简单。我不懂Javascript,所以我会使用伪代码。

对于第一种情况,我们希望匹配零个或多个(非捕获)非周期组,后跟一个周期,然后至少一个非周期,全部在host之前。对于第二种情况,我们只想匹配host

if host starts with '.':
    var reg = new RegExp('^https?://((?:[^.]+\.)*[^.]+' + host + ')');
else:
    var reg = new RegExp('^https?://(' + host + ')');

答案 1 :(得分:0)

不确定你要做什么。这个正则表达式将匹配任意数量的级别:

r = new RegExp("^https?://([^.]+[.])*([^.])+$");