我试图想出一个正则表达式来从完整的URL获取页面URL,但是从中排除了一个可能的端口号。到目前为止,我提出了以下JS:
var res = url.match(/^.*\:\/\/(?:www2?.)?([^?#]+)/i);
if(res)
{
var pageURL = res[1];
console.log(pageURL);
}
如果我这样称呼它:
var url = "http://www.example.com/php/page.php?what=sw#print";
我得到了正确答案:example.com/php/page.php
但如果我这样做:
var url = "http://www.example.com:80/php/page.php?what=sw#print";
我需要它返回example.com/php/page.php
而不是example.com:80/php/page.php
。
我可以用第二个正则表达式删除它,但我很好奇我是否可以只使用一个(速度)?
答案 0 :(得分:3)
您可以将正则表达式修改为:
/^.*\:\/\/(?:www2?.)?([^/:]+)(?:[^:]*:\d+)?([^?#]+)/i
它将返回2场比赛:
1: example.com
2: /php/page.php
对于您可以连接的两个输入,分别为match[1]
和match[2]
。
http://www.example.com/php/page.php?what=sw#print
OR
http://www.example.com:80/php/page.php?what=sw#print
更新:以下 performance results on jsperf.com 显示正则表达式方法最快。
答案 1 :(得分:0)
为什么要使用正则表达式?
修改强>
正如@ c00000fd所指出的那样:因为document
可能不可用而且document.createElement
与RegExp相比非常慢 - 请参阅:
http://jsperf.com/url-parsing/5
http://jsperf.com/hostname-from-url
尽管如此,我会留下原始答案以供参考。
原始答案:
相反,您可以使用Anchor
元素:
<强>小提琴:强>
<强> JS:强>
var url = 'http://foo:bar@www.example.com:8080/php/page.php?what=sw#print'
var a = document.createElement('a');
a.href = url;
console.log(a.hash);
console.log(a.host);
console.log(a.hostname);
console.log(a.origin);
console.log(a.password);
console.log(a.pathname);
console.log(a.port);
console.log(a.protocol);
console.log(a.search);
console.log(a.username);
其他信息:
答案 2 :(得分:0)
保持简单:
~ node
> "http://www.example.com:3000/php/page.php?what=sw#print".replace(/:\d+/, '');
'http://www.example.com/php/page.php?what=sw#print'
> "http://www.example.com/php/page.php?what=sw#print".replace(/:\d+/, '');
'http://www.example.com/php/page.php?what=sw#print'
答案 3 :(得分:0)
匹配端口的组如果存在,该如何?
var url = "http://www.example.com:80/php/page.php?what=sw#print";
var res = url.match(/^.*\:\/\/(?:www2?.)?([^?#\/:]+)(\:\d+)?(\/[^?#]+)/i);
if(res)
{
var pageURL = res[1]+res[3];
console.log(res, pageURL);
}
答案 4 :(得分:0)
尝试
var url = "http://www.example.com:80/php/page.php?what=sw#print";
var res = url.split(/\w+:\/\/+\w+\.|:+\d+|\?.*/).join("");
var url = "http://www.example.com:80/php/page.php?what=sw#print";
var res = url.split(/\w+:\/\/+\w+\.|:+\d+|\?.*/).join("");
document.body.innerText = res;
答案 5 :(得分:0)
您可以使用替换方法修改原始字符串或网址
> var url = "http://www.example.com/php/page.php?what=sw#print";
undefined
> var url1 = "http://www.example.com:80/php/page.php?what=sw#print";
undefined
> url.replace(/^.*?:\/\/(?:www2?.)?([^/:]+)(?::\d+)?([^?#]+).*$/g, "$1$2")
'example.com/php/page.php'
> url1.replace(/^.*?:\/\/(?:www2?.)?([^/:]+)(?::\d+)?([^?#]+).*$/g, "$1$2")
'example.com/php/page.php'