Regex Ruby - строка, за которой не следует "/" - PullRequest
0 голосов
/ 20 января 2019

Мне нужно сопоставить путь URL с тем, который содержит любое из 2 слов vendor_tracks или shop_types, но за типами магазинов должен следовать '/'

Мой текущий REGEX

// (vendor_tracks | shop_types) /

, но это совпадение, если содержат shop_types / 22 * ​​1009 *

Мне нужно, чтобы мой Regex соответствовал чему-то вроде:

/ shop_types? Д% 5Btrack_department

но НЕ нижеуказанный URL

/ shop_types / 27 / list_pinned_vendors

Мой текущий принимает оба, а мне нужно, чтобы он принимал только первое. Я пробовал много разных методов, чтобы исключить "shop_types", за которым следует /, но всегда получаю ошибку экранированной обратной косой черты. Любое решение для этого? или альтернативный REGEX

1 Ответ

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

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

>> str1 = '/shop_types?q%5Btrack_department'
=> "/shop_types?q%5Btrack_department"
>> str2 = '/shop_types/27/list_pinned_vendors'
=> "/shop_types/27/list_pinned_vendors"

>> str1.match?(/shop_types(?!\/)/)
=> true
>> str2.match?(/shop_types(?!\/)/)
=> false

Здесь (?!\/) - это отрицательный прогноз, который говорит, что символ / не может быть немедленным после shop_types

Обратите внимание , что конец строки также будет удовлетворять этому условию, поскольку это будет означать, что после shop_types

нет символа /.


Я пробовал много разных методов, чтобы исключить "shop_types", за которым следует /, но всегда получаю экранированную ошибку обратной косой черты

Вы можете использовать %r для определения регулярного выражения с альтернативными разделителями

# here the condition has also been changed
# restriction is that / shouldn't occur anywhere after matching shop_types
>> str1.match?(%r{shop_types(?!.*/)})
=> true
>> str2.match?(%r{shop_types(?!.*/)})
=> false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...