使用Javascript从URL字符串获取端口

Caj*_*uu' 3 javascript regex

我想在javascript中使用一个函数作为参数获取url并返回该URL的端口,如下所示:

  • 如果有一个httphttps (端口80/443),它将不会显示在url结构中,但我还是希望它们返回.
  • 如果有另一个端口,我想要返回.

例:

function myFunction(url){
    something here
    ...
    return port
}
Run Code Online (Sandbox Code Playgroud)

我已经看到使用一些额外的库可以很容易地做到这一点,但我不想使用它.从现在开始我没有和js一起工作,如果有人能够解释他的解决方案,我真的很感激.

小智 5

从我得到的,你不想location用作从中减去端口的URL,只是作为URL的任何字符串.好吧,我想出了这个案例.这个函数接受任何字符串(但你可以传递它的locationURL,它的工作方式相同):

function getPort(url) {
    url = url.match(/^(([a-z]+:)?(\/\/)?[^\/]+).*$/)[1] || url;
    var parts = url.split(':'),
        port = parseInt(parts[parts.length - 1], 10);
    if(parts[0] === 'http' && (isNaN(port) || parts.length < 3)) {
        return 80;
    }
    if(parts[0] === 'https' && (isNaN(port) || parts.length < 3)) {
        return 443;
    }
    if(parts.length === 1 || isNaN(port)) return 80;
    return port;
}
Run Code Online (Sandbox Code Playgroud)
  • 它从字符串中获取基本URL.
  • 它将基本网址分成几部分':'.
  • 它尝试将端口的仅数字部分(parts数组的最后一个元素)解析为整数.
  • 如果URL以'http' AND开头,则端口不是数字,或者URL部件数组的长度小于3(这意味着URL字符串中没有隐含端口),它将返回默认的HTTP端口.
  • 同样的事情'https'.
  • 如果长度是1,则表示没有提供协议或端口.在这种情况下或者在端口不是数字的情况下(同样,没有提供协议),返回默认HTTP端口.
  • 如果它通过所有这些测试,那么它只是将它试图解析的端口返回到函数开头的整数.