Regex - соответствует символам, но не косой черте - PullRequest
0 голосов
/ 10 января 2019

Я на самом деле ищу регулярное выражение. В основном я хочу соответствовать ниже URL

/test/*/contact/*

Мои данные примерно такие

/test/1234/contact/abcd  ----   This is correct
/test/abcd/1234/contact/abcd --- This should show not match

Я попробовал регулярное выражение как

\/test\/\S+\/contact\/\S+

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

Ответы [ 2 ]

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

\S означает «Все, что не \s».

\s означает «пробелы». Это равно: [\ r \ n \ t \ f \ v]

  • \ r - возврат каретки
  • \ n - новая строка
  • \ t - вкладка
  • \ f - символ перевода страницы (что-то вроде «следующая страница»)
  • \ v - вертикальное пространство
  • - простой пробел

Из-за этого \S включает в себя + /. Чтобы добиться того, что вы хотите, вы можете сделать что-то вроде «что угодно, кроме пробелов или слешей» (это будет: [^\/\s]*) или указать символы, которые вы принимаете (например, для буквенно-цифровых символов и -_ это будет: [a-zA-Z0-9_-]* ).

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать, и я объясню подробнее

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

Шаблон \S соответствует /. Вы должны полагаться на [^\/] отрицательный класс символов и использовать якоря:

^\/test\/[^\/]+\/contact\/[^\/]+$

См. Демоверсию regex

информация

  • ^ - начало строки
  • \/test\/ - /test/
  • [^\/]+ - 1+ символов кроме /
  • \/contact\/ - /contact/
  • [^\/]+ - 1+ символов кроме /
  • $ - конец строки.
...