从域REGEX javascript获取主机名

时间:2014-10-31 09:30:31

标签: javascript regex dns pattern-matching

我尝试做的是当我有:

www.gmail.com,

www.gmail.com /

http://www.gmail.com

https://www.gmail.com

http://gmail.com

https://gmail.com

www.gmail.com/example

刚刚获取gmail.com,远远没有搜索相关问题,我有模式匹配这些东西:

var pat = /^(https?:\/\/)?(?:www\.)?([^\/]+)/;

但是当我也说出一个单词时它也会返回true。 gmail(没有.com)。 我怎样才能改进这个以匹配abcd.efgs.com形式的东西?我的意思是指定字符串应该包含http,https,www之后的字符和至少一个点。 ?

提前致谢!

3 个答案:

答案 0 :(得分:2)

如果我的理解是正确的,您只想匹配网址的域名。

您可以使用此模式执行此操作

(?:\w+\.)+\w+

我已经复制了您的JavaScript小提琴,并使用html text textarea 框进行了更改以演示此内容。 文本框演示,从用户输入的URL中提取域名。 textarea 框演示列出了输入的多行文字中的所有域。

<强> http://jsfiddle.net/q6z3xb6d/

[更新]

再次阅读你的问题。您希望排除以www开头的域名的匹配项。您可以使用此模式:

(?!(w+)\.)\w*(?:\w+\.)+\w+

JS小提琴演示 - 更新版本:

<强> http://jsfiddle.net/q6z3xb6d/2/

答案 1 :(得分:0)

^(?:https?:\/\/)?(?:www\.)?((?:(?!www\.|\.).)+\.[a-zA-Z0-9.]+)

试试这个。看看演示。

http://regex101.com/r/yG7zB9/7

答案 2 :(得分:0)

给定一个输入字段,如:

<input type='text' id='domain'/>

我最终得到了这个解决方案,我首先将其验证为网址,然后在没有&#39; http://&#39;,&#39; https://&#39; ,&#39; www。&#39;

$(document).ready(function(){

function ValidUrl(str) {
  var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
  '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
  '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
  '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
  '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
  '(\\#[-a-z\\d_]*)?$','i'); // fragment locator
  if(!pattern.test(str)) {
    return false;
  } else {
    return true;
  }
}

$('#domain').change(function(){
    var str = $.trim($(this).val());
    if(ValidUrl(str)){
       var pat = /^(https?:\/\/)?(?:www\.)?([^\/]+)/;
       var match = str.match(pat);
        console.log(match);
         //$(this).val(str);
    }
    else{
        $(this).val('Validation failed');
    }
});
});

另见jsfiddle:http://jsfiddle.net/6mrbbq9x/5/