Шаблон регулярного выражения соответствия URL - PullRequest
0 голосов
/ 22 января 2019

У меня есть несколько URL-адресов, которые мне нужно отфильтровать, основываясь на том, содержит ли оно ключевое слово 'staff'

1. /services
2. /services/EarNoseThroat
3. /services/EarNoseThroat/Audiology
4. /services/EarNoseThroat/Audiology/CochlearImplant
5. /services/BehavioralHealth/Clinic  

6. /services/BehavioralHealth/Clinic/staff
7. /services/BehavioralHealth/Clinic/staff/Jamie-Hudgins

Я хочу создать один шаблон регулярного выражения, чтобы он соответствовал всем URL-адресам, которые имеют /services после URL-адреса хоста, но не 'staff' в любом месте URL-адреса. В основном соответствуют URL от 1 до 5.

Мне также нужен шаблон, который соответствует только URL 6 и 7.

Кажется, что отрицательный взгляд сработает, за исключением того, что я не знаю, как это собрать. Кто-нибудь может мне помочь?

Что-то вроде:

^\/services\/(?:[^\/]+\/?)*$


OR

^/services\/...any Depth here...\/(?!staff)

1 Ответ

0 голосов
/ 22 января 2019

Regex для соответствия следующему:

/services
/services/EarNoseThroat
/services/EarNoseThroat/Audiology
/services/EarNoseThroat/Audiology/CochlearImplant
/services/BehavioralHealth/Clinic  

Regex:

^\/services\/(?!.*\bstaff\b).*$

Нажмите для демонстрации

Пояснение:

  • ^ - подтверждает начало строки
  • \/services\/ - совпадения /services/
  • (?!.*\bstaff\b) - отрицательный взгляд, чтобы убедиться, что слово staff нигде в строке не появляется
  • .* - соответствует 0+ появлений любого символа, кроме символа новой строки
  • $ - устанавливает конец строки

Regex для соответствия следующему:

/services/BehavioralHealth/Clinic/staff
/services/BehavioralHealth/Clinic/staff/Jamie-Hudgins

Regex:

^\/services\/(?=.*\bstaff\b).*$

Нажмите для демонстрации

Пояснение:

Единственное отличие - это позитивный взгляд:

  • (?=.*\bstaff\b) - положительный взгляд, чтобы убедиться, что слово staff появляется где-то в строке перед концом строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...