鍍金池/ 問答/HTML/ JS如何從字符串中提取端口號?

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可以先轉(zhuǎn)換成location對象么?

回答
編輯回答
負(fù)我心

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

如果是普通字符串,并且是xxxx:xxxx形式的??梢酝ㄟ^str.split(":"),然后取返回的數(shù)組的第二個元素即可。

2018年3月4日 15:04
編輯回答
獨(dú)白

提供個思路吧,用正則

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

console.log(myResult[1]);

解釋一下這個正則,就是:
.+: 任意字符出現(xiàn)1~n次,
:: 匹配端口號之前的冒號,
(\d{1,5}): 數(shù)字出現(xiàn)1~5次(端口號是1~65535, 1~5位數(shù)字),括號表示捕獲組

當(dāng)調(diào)用var myResult = myStr.match(myReg);時,myResult是一個數(shù)組,其中myResult[1]表示捕獲組1,也就是想要的端口號

2018年6月14日 20:23
編輯回答
孤酒
function getUrlPort(url){
    var protocolReg = /^\w+:\/\//;
    if(!protocolReg.test(url)){
        url = "http://"+url
    }
    return new URL(url).port
};
2018年2月17日 13:08
編輯回答
話寡
p = str.split(':')
port = parseInt(p[p.length-1],10)
2017年3月28日 22:08