создать регулярное выражение для URL - PullRequest
0 голосов
/ 23 мая 2018

У меня будут URL либо

http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662

, либо

http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662?from=pubapi_5k2t9

Какое наилучшее / наиболее эффективное выражение регулярного выражения, которое я могу сделать, чтобы соответствовать им.По сути, это будет URL-адрес

/^https?:\/\/www.yellowpages.com\/[\w|-]+\/mip\/[\w|-]+-\d+/

, затем иногда вопросительный знак или нет, за которым следует from= текст, который я составил

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

В первой части вашего регулярного выражения вы можете экранировать точки \., если хотите буквально сопоставить их.

Если вы хотите сопоставить необязательный параметр строки запроса, вы можете использовать необязательный ? nonзахват группы (?: и утверждение конца строки $

Некоторые способы сопоставления параметра строки запроса:

  • (?:\?from=\w+)? для сопоставления одному или нескольким символам слова\w+ (что будет соответствовать pubapi_5k2t9)
  • (?:\?from=pubapi_\w{5})? Совпадение ровно 5 символов слова после pubapi_
  • (?:\?from=[^&]+)?$ Совпадение не с амперсандом с использованием отрицательного класса символов (или расширение класса символов)с \n, чтобы не соответствовать символу новой строки)

Пример для первого варианта:

^https?:\/\/www\.yellowpages\.com\/[\w|-]+\/mip\/[\w|-]+-\d+(?:\?from=\w+)?$

const strings = [
  "http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662",
  "http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662?from=pubapi_5k2t9",
  "http://www.yellowpages.com/randolph-nj/mip/brookside-village-apartments-1041662?fro=pubapi_5k2t9"
];
let pattern = /^https?:\/\/www\.yellowpages\.com\/[\w|-]+\/mip\/[\w|-]+-\d+(?:\?from=\w+)?$/;

strings.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});
0 голосов
/ 23 мая 2018

Может быть, это то, что вы ищете?

/^https?:\/\/www.yellowpages.com\/[\w|-]+\/mip\/[\w|-]+-\d+(\?from=pubapi_[^\s]{5})?/

Приведенное выше регулярное выражение будет соответствовать базовому URL и дополнительно может соответствовать ?from=pubapi_ плюс пять непробельных символов.

Мне интересно, как это сделать, или, то есть? Из или не используя это

Это должно быть суть вашего вопроса, я полагаю.Это может быть достигнуто путем создания необязательной группы с использованием ()? (обратите внимание на ? в конце, что означает «ноль или один из»).Я бы посоветовал поиграть на https://regex101.com/, чтобы почувствовать такой «продвинутый» синтаксис регулярных выражений.

...