Похоже, что ни один из этих ответов полностью не отвечает на вопрос, который требует произвольного URL, а не конкретно URL текущей страницы.
Метод 1: Используйте API URL (предостережение: нет поддержки IE11
Вы можете использовать URL API (не поддерживается IE11, но доступно везде ).
Это такжеоблегчает доступ к параметрам поиска .Еще один бонус: его можно использовать в Web Worker, поскольку он не зависит от DOM.
const url = new URL('http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
Метод 2 (по старинке): использовать встроенный в DOM парсер браузера в DOM
Используйте это, если вам это нужно для работы и в старых браузерах.
// Create an anchor element (note: no need to append this element to the document)
const url = document.createElement('a');
// Set href to any path
url.setAttribute('href', 'http://example.com:12345/blog/foo/bar?startIndex=1&pageSize=10');
Вот и все!
Встроенный парсер браузера уже сделал свою работу.Теперь вы можете просто взять нужные вам части (обратите внимание, что это работает для обоих методов выше):
// Get any piece of the url you're interested in
url.hostname; // 'example.com'
url.port; // 12345
url.search; // '?startIndex=1&pageSize=10'
url.pathname; // '/blog/foo/bar'
url.protocol; // 'http:'
Бонус: поиск параметров
Скорее всего, вы, вероятно, захотите разбить на частипараметры URL-адреса поиска также, так как '? startIndex = 1 & pageSize = 10' не слишком полезен сам по себе.
Если вы использовали метод 1 (URL API) выше, вы просто используете методы getParams:
url.searchParams.get('startIndex'); // '1'
Или для получения всех параметров:
Array
.from(url.searchParams)
.reduce((accum, [key, val]) => {
accum[key] = val;
return accum;
}, {});
// -> { startIndex: '1', pageSize: '10' }
Если вы использовали метод 2 (по-старому), вы можете использовать что-то вроде этого:
// Simple object output (note: does NOT preserve duplicate keys).
var params = url.search.substr(1); // remove '?' prefix
params
.split('&')
.reduce((accum, keyval) => {
const [key, val] = keyval.split('=');
accum[key] = val;
return accum;
}, {});
// -> { startIndex: '1', pageSize: '10' }