Próbuję przeanalizować ciągi zakodowane w postaci adresu URL, które składają się z par klucz = wartość oddzielonych przez albo &
lub &
.
Poniższe elementy dopasują tylko pierwsze wystąpienie, dzieląc klucze i wartości na oddzielne elementy wyników:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/)
Wyniki dla ciągu „1111342 = Adam% 20Franco & 348572 = Bob% 20Jones” byłyby następujące:
['1111342', 'Adam%20Franco']
Użycie flagi globalnej „g” spowoduje dopasowanie wszystkich wystąpień, ale zwróci tylko w pełni dopasowane podciągi, a nie rozdzielone klucze i wartości:
var result = mystring.match(/(?:&|&)?([^=]+)=([^&]+)/g)
Wyniki dla ciągu „1111342 = Adam% 20Franco & 348572 = Bob% 20Jones” byłyby następujące:
['1111342=Adam%20Franco', '&348572=Bob%20Jones']
Chociaż mógłbym podzielić ciąg &
i rozdzielić każdą parę klucz / wartość osobno, czy istnieje sposób, aby użyć obsługi wyrażeń regularnych JavaScript, aby dopasować wiele wystąpień wzorca, /(?:&|&)?([^=]+)=([^&]+)/
podobnie jak preg_match_all()
funkcja PHP ?
Staram się znaleźć jakiś sposób, aby uzyskać wyniki z oddzielnymi dopasowaniami, na przykład:
[['1111342', '348572'], ['Adam%20Franco', 'Bob%20Jones']]
lub
[['1111342', 'Adam%20Franco'], ['348572', 'Bob%20Jones']]
replace
tutaj używania .var data = {}; mystring.replace(/(?:&|&)?([^=]+)=([^&]+)/g, function(a,b,c,d) { data[c] = d; });
Gotowe. „matchAll” w JavaScript to „zamień” zastępczą funkcją obsługi zamiast ciągu.