Ruby Regex заменяет / abcdef / abcdef на / abcdef - PullRequest
0 голосов
/ 28 июня 2018

Заменить маршруты, которые не соответствуют начальному значению пути переменной, сравнивая значения в переменной str.

path = '/qqqq/rrrr'
str = %w|abcd efgh ijkl mnop \n|
path.gsub(/\w+/) { |rep| str.include?(rep) ? rep : 'unknown' }

Вход> путь = / abcd Выход> / abcd

Ввод> путь = / efgh Выход> / efgh

Вход> путь = / abcd / выход efgh> / неизвестно

Вход> путь = / xxxx Выход> / неизвестен

Вход> путь = / xxxx / гггг Выход> / неизвестно

Вход> путь = / xxxx / abcd Выход> / неизвестно

Есть ли эквивалент для включения в регулярное выражение?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Если какой-либо путь, который не соответствует ни одному из параметров, должен быть полностью преобразован:

result = subject.gsub(
    /\A                     # Match from the start of the string
    (?!                     # Assert that this doesn't match:
     \/                     # a slash
     (abcd|efgh|ijkl|mnop)  # followed by one of the allowed paths
     \z                     # that makes up the entire string
    )                       # (End of lookahead assertion)
    .*                      # Match anything/x, '/unknown')

Но для этого вам не нужно регулярное выражение.

0 голосов
/ 28 июня 2018
str = %w|abcd efgh ijkl mnop|
paths = %w|/abcd /efgh /abcd/efgh /xxxx /xxxx/yyyy /xxxx/abcd|
paths.map { |path| path[%r|\A/(?:#{Regexp.union(str)})/?\z|] || '/unknown' }
#⇒ ["/abcd", "/efgh", "/unknown", "/unknown", "/unknown", "/unknown"]

Regexp - это: \A для начала строки, за которым следует косая черта, за которым следует регулярное выражение, построенное как объединение возможностей, за которым может быть, возможно, одна косая черта, за которой следует конец строки.

0 голосов
/ 28 июня 2018

Использование gsub! следует сделать трюк:

path.
  gsub(/\w+/) { |rep| str.include?(rep) ? rep : 'unknown' }.
  sub!("/unknown", "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...