регулярное выражение для сопоставления строки, которая является допустимым URL-адресом и не содержит заданного c слова или является заданной c строкой - PullRequest
0 голосов
/ 28 января 2020

Мой случай:

  1. Строка является действительным URL и не содержит fbdcdn.net где-то в строке
  2. Строка также может быть просто N/A

Пока у меня есть текущее регулярное выражение, которое успешно проверит, является ли URL действительным, и также может быть просто N / A

Regex

http(?:s)?:\/\/(?:www\.)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:\/?#[\]@%!\$&'\(\)\*\+;=.]+$|(?:N\/A)

Должен работать

https://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Google_2015_logo.svg/1200px-Google_2015_logo.svg.png

Не должен работать

https://scontent-frt3-1.xx.fbdcdn.net/v/t1.0-9/abcde.jpg?_nc_cat=108&_nc_ht=scontent-frt3-1.xx

Так как я не могу получить эту работу, я был бы признателен за некоторую помощь или объяснение, что следует Я делаю дальше.

Заранее спасибо

1 Ответ

2 голосов
/ 28 января 2020

Если вашей входной строкой является только URL (или N/A), вы можете сделать это довольно легко с негативным прогнозом. Это не даст совпадения, если в любом месте в URL появится fbdcdn.net.

(?!^.*?fbdcdn.net.*?$)^(?:http(?:s)?:\/\/(?:www\.)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:\/?#[\]@%!\$&'\(\)\*\+;=.]+$|(?:N\/A))$

По сути, это то же самое регулярное выражение, которое вы указали в вашем вопросе, с незначительными изменениями: (?!^.*?fbdcdn.net.*?$)^...$

(?!            // Start negative lookahead (fail entire match if lookahead matches)
   ^           // Anchor to the start of the string
   .*?         // look for any characters (lazily)
   fbdcdn.net  // then match our forbidden string
   .*?         // then look for any more characters (lazily)
$)             // before we find the end of our string, end lookahead
^              // anchor the pattern to the start of the string
...            // your URL matching pattern
$              // anchor the pattern to the end of the string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...