Как я могу соответствовать нескольким случаям regex в JavaScript, подобном preg_match_all PHP ()?

Названия таблиц и имена столбцов должны быть статическими, если запрос статичен. Для динамических имен таблиц или столбцов вы должны генерировать полный SQL динамически и использовать sp_executesql для его выполнения.

Подробнее здесь: Проклятие и благословения динамического SQL

157
задан Adam Franco 6 February 2009 в 15:25
поделиться

3 ответа

Я предложил бы альтернативу regex, с помощью подгрупп для получения имени и значения параметров индивидуально:

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 объект:

{
  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"
}

regex ломается следующим образом:

(?:            # 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
155
ответ дан Tomalak 4 November 2019 в 17:30
поделиться

Необходимо использовать переключатель 'g' для глобального поиска

var result = mystring.match(/(&|&)?([^=]+)=([^&]+)/g)
66
ответ дан meouw 4 November 2019 в 17:30
поделиться

Установите g модификатор для глобального соответствия:

/…/g
15
ответ дан Gumbo 4 November 2019 в 17:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: