【问题标题】:How to write regex for website url with trailing pages如何为带有尾页的网站网址编写正则表达式
【发布时间】:2013-11-01 06:15:04
【问题描述】:

我需要使用http://www... 编写一些匹配以下模式的正则表达式。

http://www.domain.com/ 以及后面的任何内容。我需要它匹配是否有“http://”、“www.”或任何尾随页面。从字面上看,我希望用户输入的只是 domain.com。所以我想通过匹配http://www.domain.com/来抛出错误...

这是我想出的:

new RegExp("^(http[s]?:\\/\\/(www\\.)?|www\\.){1}([0-9A-Za-z-\\.@:%_\+~#=]+)+((\\.[a-zA-Z]{2,3})+)(/(.)*)?(\\?(.)*)?");

但只有在存在“http://”或“www.”时才匹配。如何捕捉 URL 中的尾随页面?任何页面。

【问题讨论】:

  • 所以如果他们输入 domain.com/page 我想抓住它。
  • 所以你基本上是说你想匹配 http://www.
  • 或任何页面。从字面上看,我想要的只是 domain.com 来验证
  • 一些示例输入和输出确实会有所帮助,因为我似乎无法理解您的要求。
  • 我唯一想通过验证的是 domain.com。 domain.com 之后没有页面,也没有http://www. 所以我希望正则表达式捕获domain.com/pagehttp://domain.comwww.domain.com。这有帮助吗?

标签: javascript regex


【解决方案1】:

你不能把它转过来,让正则表达式匹配 domain.com,然后否定结果吗?

例如:

var foo = "domain.com";
if (! foo.match(/^[a-z0-9-]+\.[a-z]{2,6}$/)) {
  // throw error
}

【讨论】:

    【解决方案2】:

    让用户输入“whatever”,然后你取出你需要的东西怎么样?

    function extractHost(userInput){
        var url = document.createElement('a');
        url.href = userInput;
        return url.hostname;
    }
    
    console.log(extractHost('http://stackoverflow.com/foo?bar=1'));
    
    // stackoverflow.com
    

    或者,如果您想为主机名以外的任何内容返回“false”,请将return 行更改为:

    return url.hostname == userInput;
    

    【讨论】:

    • 我喜欢这样。让我试试看。
    • stackoverflow.com 返回 false
    • 我在几分钟前更新了代码,确保你有正确的return 行。它对我有用。
    【解决方案3】:

    以下是匹配 url 其余部分的方法:

    /(?:http[s]?:\/\/|www\.):?(?:[^\/]*)\/(.*)/.exec(str);
    

    结果将在返回数组的第二个元素中。

    /(:?http[s]?:\/\/|www\.):?(?:[^\/]*)\/(.*)/.exec('https://test.domain.com/page/page2');
    

    返回

    ["https://test.domain.com/page/page2", "page/page2"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 2012-01-29
      • 2017-01-06
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多