Search code examples
javascripturlrelative-path

How To Join Relative URLs in JavaScript


I want to join two strings each representing a relative URL in Javascript.

I want to join the base URL http://www.adress.com/more/evenmore with the following examples:

  1. ../../adress (with the expected output: http://www.adress.com/adress)
  2. ../adress (with the expected output http://www.adress.com/more/adress)

What would be the best way? I was thinking of using regexp and checking
how many ../ preceed the relative URL, then subtracting that amount from the baseurl and adding them to what is left.


Solution

  • The following function decomposes the URL then resolves it.

    function concatAndResolveUrl(url, concat) {
      var url1 = url.split('/');
      var url2 = concat.split('/');
      var url3 = [ ];
      for (var i = 0, l = url1.length; i < l; i ++) {
        if (url1[i] == '..') {
          url3.pop();
        } else if (url1[i] == '.') {
          continue;
        } else {
          url3.push(url1[i]);
        }
      }
      for (var i = 0, l = url2.length; i < l; i ++) {
        if (url2[i] == '..') {
          url3.pop();
        } else if (url2[i] == '.') {
          continue;
        } else {
          url3.push(url2[i]);
        }
      }
      return url3.join('/');
    }