Написать регулярное выражение с хитрым условием

Нужна регулярка, которая бы проверяла ссылку с такими условиями:

  • ссылка относительная
  • ссылка может содержать что угодно (пусть будет так, в смысле любые символы)
  • ссылка может содержать слово after (в любой позиции), только в том случае если это before/after

Вот что у меня получилось. Условие с http(s) и after отрабатывает нормально, то есть after работает только после before. Но ничего другое не отрабатывает, ну например просто '/foo/bar'

/^(?<!https?:\/\/).*(?<=before\/)after/.test('/before/after')


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Вы можете использовать

/^(?!https?:\/\/)(?!.*(?<!before\/)after).*/

См. пример работы выражения

Подробности

  • ^ - начало строки
  • (?!https?:\/\/) - в начале не должно быть https:// или http://
  • (?!.*(?<!before\/)after) - в строке не должно быть after, перед которым нет before/
  • .* - 0 и более символов, отличных от символов перехода на новую строку, как можно больше
→ Ссылка