SORU
6 ŞUBAT 2009, Cuma


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
6 ŞUBAT 2009, Cuma


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gsmaestro

    gsmaestro

    17 AĞUSTOS 2006
  • Ryan Ha

    Ryan Ha

    9 NİSAN 2006
  • ThreadBanger

    ThreadBanger

    2 Mart 2007