【问题标题】:Struggle with a Regex to change subdomain, and subsubdomain努力使用正则表达式更改子域和子子域
【发布时间】:2011-09-03 00:57:38
【问题描述】:

我从另一个帖子中得到这个:

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

我尝试写其他东西,但无法得到它检查 sub -sub 。甚至下降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

:) 更清楚了

【问题讨论】:

  • 我错了,还是表达式中的“.mylocal.com”会匹配任何一个字符,“mylocal”,任何其他字符,以及“com”?快速测试表明它匹配“www.mylocal.com”以及“www/mylocal.com”和“wwwamylocalbcom”。

标签: javascript regex dns


【解决方案1】:

基本问题是你要匹配各种前缀,后跟host,如果host.开头;但如果不是,你想单独匹配host。这可以通过前瞻断言来完成,但是由于无论如何您都在构建正则表达式,因此根据情况以不同方式构建它要简单得多。我不懂Javascript,所以我会使用伪代码。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多