Простой способ распарсить и редактировать URL строку

Необходимость распарсить и модифицировать URL-строку произвольного вида часто приводит к использованию большого количества регулярных выражений.
Есть достаточно удобный способ этого избежать и переложить парсинг URL на сторону браузера.

Для этого необходимо создать (но не прикреплять к DOM) элемент <a> и указать нужный URL в href:

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

// Теперь доступно: 
parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"

parser.href; // результат

Например для добавления параметра я использую утилитарную функцию вида:

/**
 * Добавляет параметр в URL строку
 * @param {string} url - любой URL
 * @param {string} paramString - строка вида "name=value"
 */
function addParamToURL(url, paramString) {
    var a = document.createElement('a');
    a.href = url;

    if(a.search.startsWith('?')) {
        a.search += '&' + paramString;
    } else {
        a.search = '?' + paramString;
    }

    return a.href;
}

Данный способ позволяет аккуратно добавить параметр, сохранив хеш, в случае его наличия.