Я пытаюсь проанализировать строки в кодировке URL, которые состоят из пар ключ = значение, разделенных либо &
или &
.
Следующее будет соответствовать только первому вхождению, разбивая ключи и значения на отдельные элементы результата:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)
Результаты для строки «1111342 = Адам% 20Franco & 348572 = Боб% 20Jones» будут следующими:
['1111342', 'Adam%20Franco']
Использование глобального флага 'g' будет соответствовать всем вхождениям, но вернет только полностью соответствующие подстроки, а не разделенные ключи и значения:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)
Результаты для строки «1111342 = Адам% 20Franco & 348572 = Боб% 20Jones» будут следующими:
['1111342=Adam%20Franco', '&348572=Bob%20Jones']
Хотя я мог бы разбить строку &
и разбить каждую пару ключ / значение по отдельности, есть ли способ использовать поддержку регулярных выражений JavaScript, чтобы сопоставить множественные вхождения шаблона, /(?:&|&)?([^=]+)=([^&]+)/
аналогичные PHPpreg_match_all()
функции ?
Я стремлюсь к какому-то способу получить результаты с разделенными под-матчами, например:
[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]
или
[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
replace
здесь.var data = {}; mystring.replace(/(?:&|&)?([^=]+)=([^&]+)/g, function(a,b,c,d) { data[c] = d; });
сделано. «matchAll» в JavaScript - это «заменить» функцией замены вместо строки.