JS如何从字符串中提取端口号?

xxx.com:8080/xxx
www.xxx.com:8080/xxx
http://wwww.xxx.com:8080/xxx
http://xxx.com:8080/xxx
1.2.3.4:8080/xxx
http://1.2.3.4:8080/xxx

类似于上面的格式的字符串,我如何从中取出地址hostname,端口号port?
类似window.location.hostname可以先转换成location对象么?

阅读 6.8k
4 个回答
function getUrlPort(url){
    var protocolReg = /^\w+:\/\//;
    if(!protocolReg.test(url)){
        url = "http://"+url
    }
    return new URL(url).port
};

提供个思路吧,用正则

var myReg = /.+:(\d{1,5})/;
var myStr = 'http://1.2.3.4:8080';
var myResult = myStr.match(myReg);

console.log(myResult[1]);

解释一下这个正则,就是:
.+: 任意字符出现1~n次,
:: 匹配端口号之前的冒号,
(\d{1,5}): 数字出现1~5次(端口号是1~65535, 1~5位数字),括号表示捕获组

当调用var myResult = myStr.match(myReg);时,myResult是一个数组,其中myResult[1]表示捕获组1,也就是想要的端口号

p = str.split(':')
port = parseInt(p[p.length-1],10)

如果是直接从url中取,那么document.location.port就可以拿得到。

如果是普通字符串,并且是xxxx:xxxx形式的。可以通过str.split(":"),然后取返回的数组的第二个元素即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题