Nasıl JavaScript bir PHP düzenli ifade için benzer'In preg_match_all ile birden fazla kopyasını kullanabilir miyim()?
Url olarak kodlanmış bir anahtar oluşur bu dizeleri=değer çiftleri ya &
&
ile ayrılmış ayrıştırmak için çalışıyorum.
Aşağıdaki sadece ilk geçtiği maç olacak, ayrı sonuç elemanları: anahtarlar ve değerler parçalanıyor
var result = mystring.match(/(?:&|&)?([^=] )=([^&] )/)
Dizesi sonuçları '1111342=Adam Franco&=348572 Bob Jones' olacaktır:
['1111342', 'Adam Franco']
Genel bayrağını kullanarak, 'g', tüm eşleşme olacağı, ancak tam olarak eşleşen alt dizeleri, ayrılmış anahtarları ve değerleri döndürür:
var result = mystring.match(/(?:&|&)?([^=] )=([^&] )/g)
Dizesi sonuçları '1111342=Adam Franco&=348572 Bob Jones' olacaktır:
['1111342=Adam Franco', '&348572=Bob Jones']
Süre edebilirim split string &
ve parçalayın her anahtar/değer çifti ayrı ayrı, herhangi bir şekilde kullanarak JavaScript düzenli ifade desteği için maç birden fazla kopyasını desen /(?:&|&)?([^=] )=([^&] )/
benzer PHP preg_match_all()
fonksiyon?
Bir şekilde alt maçlar ayrılmış gibi sonuçlar elde ediyorum:
[['1111342', '348572'], ['Adam Franco', 'Bob Jones']]
ya
[['1111342', 'Adam Franco'], ['348572', 'Bob Jones']]
CEVAP
Alternatif bir düzenli ifade, alt gruplar parametre adı ve değeri ayrı ayrı yakalamak için kullanmanızı öneriyorum:
function getUrlParams(url) {
var re = /(?:\?|&(?:amp;)?)([^=&#] )(?:=?([^&#]*))/g,
match, params = {},
decode = function (s) {return decodeURIComponent(s.replace(/\ /g, " "));};
if (typeof url == "undefined") url = document.location.href;
while (match = re.exec(url)) {
params[decode(match[1])] = decode(match[2]);
}
return params;
}
var result = getUrlParams("http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=Frankfurt am Main&sll=50.106047,8.679886&sspn=0.370369,0.833588&ie=UTF8&ll=50.116616,8.680573&spn=0.35972,0.833588&z=11&iwloc=addr");
result
bir nesne
{ f: "q" geocode: "" hl: "de" ie: "UTF8" iwloc: "addr" ll: "50.116616,8.680573" q: "Frankfurt am Main" sll: "50.106047,8.679886" source: "s_q" spn: "0.35972,0.833588" sspn: "0.370369,0.833588" z: "11" }
Normal ifade aşağıdaki gibi ayırır
(?: # non-capturing group \?|& # "?" or "&" (?:amp;)? # (allow "&", for wrongly HTML-encoded URLs) ) # end non-capturing group ( # group 1 [^=&#] # any character except "=", "&" or "#"; at least once ) # end group 1 - this will be the parameter's name (?: # non-capturing group =? # an "=", optional ( # group 2 [^&#]* # any character except "&" or "#"; any number of times ) # end group 2 - this will be the parameter's value ) # end non-capturing group
Nasıl Düzenli İfade, JavaScript için b...
Nasıl bir düzenli ifade içinde birden ...
Nasıl WPF veri tetiklemek için birden ...
Nasıl ve grunt.js (0.3.birden fazla CS...
Nasıl birden çok hatları üzerinden Jav...