Регулярное выражение, чтобы убедиться, что конкретное слово не встречается в середине шаблона

У меня есть регулярное выражение, которое соответствует диапазону символов в списке, но я бы хотел, чтобы оно не совпадало со словом.

Мой Regex это:

^widget/([\w\d~]+)/?(?:[\w\d~]+)/?$

Я хотел бы, чтобы это соответствовало так:

  • widget/JQYHHU - Просмотр виджета, должен совпадать
  • widget/JQYHHU/ - Просмотр виджета, должен совпадать
  • widget/JQYHHU/bag-of-screws - Просмотр виджета, должен совпадать
  • widget/JQYHHU/bag-of-screws/ - Просмотр виджета, должен совпадать
  • widget/add - Виджет видимости, не должен совпадать
  • widget/add/ - Виджет видимости, не должен совпадать

Можно ли добавить условие, чтобы оно совпадало с символами, но только если они пишут слово "добавить"?

1 ответ

Решение
^widget/(?!add)([\w\d~]+)/?(?:[\w\d~]+)/?$

Это отрицательное прогнозное утверждение нулевой ширины; в основном это говорит: "Стоя там, где я сейчас нахожусь, убедитесь, что если я смотрю вперед, я не вижу закономерности add, но не двигайте позицию курсора, когда я закончу."

Читайте об этом здесь: http://www.regular-expressions.info/lookaround.html

Другие вопросы по тегам