如何在JavaScript中替换端口号?

时间:2014-09-11 09:44:43

标签: javascript

我有一个字符串数组,我想创建一个包含相同字符串而没有端口号的新数组(端口号是“:”后跟一个数字)。例如,如果字符串为“http://www.example.com:8080/hello/”,则应将其替换为“http://www.example.com/hello/”。我如何在JavaScript中执行此操作?我需要它来调用safari.extension.addContentScriptFromURL,因为白名单不能包含端口号。如果可能的话,最好只在第二个和第三个斜杠之间替换端口号,并保持字符串的其余部分不变。

7 个答案:

答案 0 :(得分:4)

这应该可以做你想要的:

var newUrls = urls.map(function (url) {
    return url.replace(/([a-zA-Z+.\-]+):\/\/([^\/]+):([0-9]+)\//, "$1://$2/");
});

编辑:似乎URI的架构部分可以包含“+”,“。”并且。相应地更改了正则表达式。

请参阅:https://en.wikipedia.org/wiki/URI_scheme

答案 1 :(得分:3)

执行此操作的一种非常好的方法是创建a元素,并将您拥有的网址指定为href - 因为the HTMLAnchorElement interface implements URLUtils,因此支持访问单个部分地址的方式与location对象的方式相同,您也可以单独设置

var foo = document.createElement("a");
foo.href = "http://www.example.com:8080/hello/";
foo.port = ""
var newURL = foo.href;
console.log(newURL); // output: http://www.example.com/hello/

http://jsfiddle.net/pdymeb5d/

答案 2 :(得分:2)

您可以使用带有string.replace()的正则表达式,如下所示,

var text = "http://www.example.com:8080/hello/";
var withNoDigits = text.replace(/[0-9]/g, '');
var outputString = withNoDigits.replace(/:([^:]*)$/,'$1');
alert(outputString);

答案 3 :(得分:0)

    function parseURL(url) {
        var parser = document.createElement('a'),
            searchObject = {},
            queries, split, i;
        parser.href = url;

        queries = parser.search.replace(/^?/, '').split('&');
        for( i = 0; i < queries.length; i++ ) {
            split = queries[i].split('=');
            searchObject[split[0]] = split[1];
        }
        return {
            protocol: parser.protocol,
            host: parser.host,
            hostname: parser.hostname,
            port: parser.port,
            pathname: parser.pathname,
            search: parser.search,
            searchObject: searchObject,
            hash: parser.hash


 };
}

使用它来解析任何URL并以您喜欢的格式排列。

答案 4 :(得分:0)

好的,我用了你的答案并稍微改了一下,因为协议也可能包含破折号:

var newUrls = urls.map(function(url) {
    return url.replace(/([^\/\:]+):\/\/([^\/]+):([0-9]+)\//, "$1://$2/");
})

答案 5 :(得分:0)

我在这里找到了最佳解决方案。

var url = 'http://localhost:7001/www.facebook.com'; // Create a regex to match protocol, domain, and host var matchProtocolDomainHost = /^.*\/\/[^\/]+:?[0-9]?\//i; // Replace protocol, domain and host from url, assign to {myNewUrl {1}} 现在myNewUrl ==='www.facebook.com'。

最好阅读整页。 remove hostname and port from url using regular expression

答案 6 :(得分:0)

您不需要任何库或REGEX

var url = new URL('http://localhost:8080');
url.port = '';
console.log(url.toString());

https://developer.mozilla.org/en-US/docs/Web/API/URL

问候