Требуется редактирование функции - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время следующий код принимает href и выстраивает все параметры, которые будут вызваны позже:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(
        /[?&]+([^=&]+)=([^&]*)/gi,
        function (m, key, value) {
            vars[key] = value;
        });
    return vars;
}

Это работает с href, параметры которого установлены как параметр = значение в URL. Я нашел эту функцию в сети и не очень разбираюсь в javascript, но мне нужно отредактировать ее так, чтобы вместо = являющегося делительным фактором между параметром и значением, вместо этого был% 3A. Так, например, параметр% 3Avalue из-за другого формата на сайте, над которым я работаю. Я не уверен, как работает эта функция, поэтому мне трудно ее редактировать. Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Если вам нужно несколько элементов в декодированном формате, попробуйте сначала применить decodeURIComponent к строке href. Если вы хотите декодировать только% 3A, вероятно, будет проще всего сначала декодировать его (чтобы строка выглядела так, как будто она использует = знаки).

function getUrlVars() {
        var vars = {};

        var partsWithEqSign = window.location.href.replace(/%3A/g, "=");

        var parts = partsWithEqSign.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
            vars[key] = value;
        });
        return vars;
    }

Кстати, Используемый фрагмент кода включает регулярные выражения, которые являются одним из самых сложных понятий в JavaScript, но действительно полезны, когда вы их изучите.

0 голосов
/ 27 февраля 2020
/[?&]+([^=&]+)%3A([^&]*)/gi

для чего-то вроде:? Параметр% 3Avalue

/([^=&]+)%3A([^&]*)/gi

для чего-то вроде: параметр% 3Avalue

Он использует RegEx, который соответствует части строки. И метод замены заменит соответствующую часть вторым аргументом (в вашем примере это функция). В следующий раз вы можете использовать тестер Regex, например, https://regex101.com

...