Regex - получить строку запроса без хеша

Нужно иметь возможность передать URL, а регулярное выражение должно быть в состоянии извлечь только строку запроса. Ключевая часть, тем не менее, опускает hashbang и все, что после него.

Это то, что я имею до сих пор, который игнорирует хэш, но все равно получает текст после этого. Это также все еще получает все до первого ?,

/([^&=#]+)=?([^&#]*)/g

Примечание: я знаю о window.location.search, но я должен быть в состоянии передать в любой строке URL.

3 ответа

Если вы хотите извлечь части URL из строки, RegExp - неподходящий инструмент для работы. Слишком много странных случаев, и в браузере есть несколько простых встроенных способов анализа URI:

function parseUri(uri) {
    var a = document.createElement('a');
    a.href = uri;
    return {
        protocol: a.protocol,
        host: a.host,
        hostname: a.hostname,
        port: a.port,
        pathname: a.pathname,
        search: a.search,
        hash: a.hash
    };
}

Этот код не сломается, когда он встретит URI, например:

'http://www.foo.com???#?foo=bar&fizz=buzz#'

И может быть использован для вашего случая как:

parseUri('http://www.foo.com???#?foo=bar&fizz=buzz#').search; // '???'

Чтобы получить строку запроса, этого должно быть достаточно.

\?.*

Если вы хотите быть более конкретным, вы можете попробовать это:

\?(([a-zA-Z]+(=[a-zA-Z])?)&?)+

Первый символ обозначает строку запроса начало (?), За которой следуют пары ключ = значение, принимающие также ключи без значений, которые определены ((=[a-zA-Z])? Отвечает за то, чтобы сделать это необязательным). Это может быть улучшено, но это отправная точка для более сложных вещей. Также обратите внимание, что я предполагаю только значения, состоящие из строчных и прописных букв. Вы можете добавить номера к нему тоже.

Вы не можете использовать регулярные выражения:

var url='http://www.somewhere.com/#something?other&moreStuff';
var index=url.indexOf('#');
var whatIwant = url.substring(index+1);

Или из вашего регулярного выражения:

([^#]+)=?([^&#]*)
Другие вопросы по тегам