我试图想出一个正则表达式来从完整的 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
。
我可以用第二个正则表达式删除它,但我很好奇我是否可以只用一个正则表达式来完成(为了速度)?
最佳答案
您可以将正则表达式修改为:
/^.*\:\/\/(?:www2?.)?([^/:]+)(?:[^:]*:\d+)?([^?#]+)/i
RegEx Demo
它将返回 2 个匹配项:
1: example.com
2: /php/page.php
作为 match[1]
和 match[2]
分别用于您可以连接的两个输入。
http://www.example.com/php/page.php?what=sw#print
或
http://www.example.com:80/php/page.php?what=sw#print
更新:这里是 performance results on jsperf.com 显示正则表达式方法是最快的。
关于javascript - 单个正则表达式获取页面 URL 但从完整 URL 中排除端口号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080638/