我从另一篇文章中得到了这个:
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
:)更明确
答案 0 :(得分:1)
基本问题是,如果host
以host
开头,您希望匹配所有类型的前缀,后跟.
。但是如果没有,你想单独匹配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?://([^.]+[.])*([^.])+$");