javascript - 单个正则表达式获取页面 URL 但从完整 URL 中排除端口号

标签 javascript regex url

我试图想出一个正则表达式来从完整的 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/

相关文章:

python - 如何获得正则表达式的最接近匹配

regex - 在 Qt 中,用最少的代码用正则表达式捕获替换字符串匹配是什么?

javascript - 将 html 字符串拆分为字符串数组,按顶级标签拆分

javascript - 为开发与生产中的 Assets 提供服务

javascript - 当多个表单位于同一页面时,WTForms 提交表单两次

javascript - 将图像放入 HTML Canvas(适合宽度和高度)

jquery - 如何在发生任何更改时检测当前 url

javascript - 关于javascript的toFixed()函数用法的问题

jsp - struts2 url 到默认 namespace 图像

c# - 将字符串附加到 URL