Estou tentando analisar seqüências de caracteres codificadas em URL que são compostas de pares chave = valor separados por um &
ou outro&
.
O seguinte corresponderá apenas à primeira ocorrência, dividindo as chaves e os valores em elementos de resultado separados:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)
Os resultados para a sequência '1111342 = Adam% 20Franco & 348572 = Bob% 20Jones' seriam:
['1111342', 'Adam%20Franco']
O uso do sinalizador global 'g' corresponderá a todas as ocorrências, mas retornará apenas as sub-sequências totalmente correspondentes, não as chaves e valores separados:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)
Os resultados para a sequência '1111342 = Adam% 20Franco & 348572 = Bob% 20Jones' seriam:
['1111342=Adam%20Franco', '&348572=Bob%20Jones']
Embora eu possa dividir a string &
e separar cada par de chave / valor individualmente, há alguma maneira de usar o suporte à expressão regular do JavaScript para corresponder a várias ocorrências do padrão /(?:&|&)?([^=]+)=([^&]+)/
semelhante ao PHPpreg_match_all()
função ?
Estou buscando uma maneira de obter resultados com as sub-correspondências separadas como:
[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]
ou
[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
replace
aqui.var data = {}; mystring.replace(/(?:&|&)?([^=]+)=([^&]+)/g, function(a,b,c,d) { data[c] = d; });
feito. "matchAll" no JavaScript é "replace" por uma função de manipulador de substituição em vez de uma string.