Uri
Uri

Reputation: 3301

How do I replace the port number in JavaScript?

I have an array of strings, and I want to create a new array which contains the same strings without port numbers (the port number is a ":" followed by a number). For example if the string is "http://www.example.com:8080/hello/" Then it should be replaced with "http://www.example.com/hello/". How do I do it in JavaScript? I need it to call safari.extension.addContentScriptFromURL because the whitelist can't contain port numbers. If possible, it's better to replace the port number only between the second and third slash and leave the rest of the string unchanged.

Upvotes: 8

Views: 11163

Answers (7)

Israel Perales
Israel Perales

Reputation: 2360

You don't need any library or REGEX

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

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

Regrards

Upvotes: 19

Asad Naeem
Asad Naeem

Reputation: 636

I have found best solution here.

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 tomyNewUrl var myNewUrl = url.replace(matchProtocolDomainHost, ''); Now myNewUrl === 'www.facebook.com'.

Better to read full page. remove hostname and port from url using regular expression

Upvotes: 0

Jonathan Steinbeck
Jonathan Steinbeck

Reputation: 82

This should probably do what you want:

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

Edit: It seems the schema part of URIs can contain "+", "." and "-" also. Changed the regular expression accordingly.

See: https://en.wikipedia.org/wiki/URI_scheme

Upvotes: 2

Uri
Uri

Reputation: 3301

OK, I used your answer and changed it a little, because the protocol may contain dashes too:

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

Upvotes: 0

Duminda Wanninayake
Duminda Wanninayake

Reputation: 127

You can use regex with string.replace() as follows,

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

Upvotes: 2

C3roe
C3roe

Reputation: 96424

One quite nifty way to do this, is to create an a element, and assign the URL you have as href - because the HTMLAnchorElement interface implements URLUtils, and therefor supports accessing the individual parts of the address in the same way the location object does, and you can set them individually as well:

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/

Upvotes: 4

Subash Selvaraj
Subash Selvaraj

Reputation: 3385

    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


 };
}

Use this to parse any URL and arrange in a format you prefer.

Upvotes: 0

Related Questions