【问题标题】:get host name from domain REGEX javascript从域 REGEX javascript 获取主机名
【发布时间】:2014-10-31 09:30:31
【问题描述】:

我尝试做的是当我拥有:

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 之后至少包含一个点。 ?

提前致谢!

【问题讨论】:

    标签: javascript regex dns pattern-matching


    【解决方案1】:

    如果我的理解是正确的,你只想匹配一个 URL 的域名。

    你可以用这个模式做到这一点

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

    我已经复制了您的 JavaScript Fiddle 并进行了更改以使用 html text 和 textarea 框来演示这一点。 textbox 演示从用户输入的 URL 中提取域名。 textarea 框演示列出了输入的多行文本中的所有域。

    http://jsfiddle.net/q6z3xb6d/

    [更新]

    请再次阅读您的问题。看起来您想排除以 www 开头的域的匹配项。你可以使用这个模式:

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

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

    http://jsfiddle.net/q6z3xb6d/2/

    【讨论】:

    • 您的解决方案似乎效果很好!这就是我的预期.. 非常感谢!我将其标记为原始问题的正确答案。
    【解决方案2】:
    ^(?:https?:\/\/)?(?:www\.)?((?:(?!www\.|\.).)+\.[a-zA-Z0-9.]+)
    

    试试这个。查看演示。

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

    【讨论】:

    • 这是一个很好的答案,尽管当您输入类似以下内容时:www.gmail.example.com 将只返回 gmail.example 尽管我想在 www 之后返回整个内容。您可以对其进行编辑以考虑到这一点吗?
    • 完美男人!如果您能向我解释一下您在这个正则表达式中的哪个位置排除斜杠(/),我将不胜感激?使用正确的正则表达式编辑您的答案,我认为它已被接受!:)
    • @sstauross 我实际上并没有排除/。只是[a-zA-Z0-9.] 字符类不包含/,因此无法匹配。它将匹配直到遇到超出定义的字符类
    • 看看这个小提琴:jsfiddle.net/6mrbbq9x 当我尝试正则表达式并没有真正返回我想要的,我做错了什么?
    • 还有其他方法吗?因为这个:jsfiddle.net/6mrbbq9x/1 似乎部分工作......
    【解决方案3】:

    给定一个输入字段,例如:

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

    我最终得到了这个解决方案,我首先将其验证为 url,然后获取不带“http://”、“https://”、“www”的字符串。

    $(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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      相关资源
      最近更新 更多