1

我需要编写一些与以下模式匹配的正则表达式,带有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 中的尾随页面?任何页面。

4

3 回答 3

1

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

例如:

var foo = "domain.com";
if (! foo.match(/^[a-z0-9-]+\.[a-z]{2,6}$/)) {
  // throw error
}
于 2013-10-31T22:14:02.860 回答
1

让用户输入“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;
于 2013-10-31T22:07:37.420 回答
0

以下是如何匹配 url 的其余部分:

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

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

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

返回

["https://test.domain.com/page/page2", "page/page2"]
于 2013-10-31T22:09:14.350 回答