Регулярное выражение переменной Ruby в Array Select - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь исключить элементы из массива строк, используя array.select.У меня есть этот метод:

def filter_out_other_bad_vals(array_of_strs, things_i_want)
  array_of_strs = array_of_strs.select { |line| /"#{things_i_want}"/.match(line) } 
end 

Я хочу передать строку в качестве переменной things_i_want.Но это не возвращает совпадений:

array = ["want_this", "do_not_want", "do_not_want","want_this", "want_this"]
pattern = 'want_this'
array = filter_out_other_bad_vals(array, pattern)

Возвращает пустой массив.Но если я жестко закодирую значение в выражении соответствия, я получу то, что хочу.

def filter_out_other_bad_vals(array_of_strs, things_i_want)
  array_of_strs = array_of_strs.select { |line| /want_this/.match(line) } 
end 

Как поместить переменную в регулярное выражение?Что я делаю неправильно?

Я мог бы просто просмотреть массив, проверить каждый элемент, а затем сохранить значение в другом массиве, но это не очень похоже на ruby, не так ли?

1 Ответ

0 голосов
/ 27 ноября 2018

Вы включаете кавычки в определение регулярного выражения:

 /"#{things_i_want}"/

удалите их, и это должно работать:

/#{things_i_want}/

РЕДАКТИРОВАТЬ: Кстати, вам не нужно использовать регулярное выражение длядля точного соответствия вы можете использовать проверку на равенство (==) или #include? в зависимости от того, хотите ли вы, чтобы строка была равна той вещи, которую вы хотите, или просто включила:

> array = ["want_this", "do_not_want", "do_not_want","want_this", "want_this"]
> array.select{|line| line == 'want_this'}
# => ["want_this", "want_this", "want_this"]
> array.select{|line| line.include? 'want_this'}
# => ["want_this", "want_this", "want_this"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...