2016-09-07 2 views
-1

У меня есть приложение для рельсов, где я использую kaminari для разбивки на страницы.Regex for gsub in rails

Как-то Каминари использует неправильный URL для гиперссылок.

Прямо сейчас я ищу легкое исправление, которое требует некоторого регулярного выражения & gsubbing.

У меня есть этот адрес из Kaminari:

"/bookings/hotels//Pune?arrival_date=....." 

Я хочу, чтобы заменить эту часть - /hotels//Pune? с этим - /hotels?

Там может быть любая другая строка вместо Pune (это может измениться).

Как мне это сделать?

ответ

1

Захвата и замена с использованием match capture

gsub(/hotels(\/\/\w+)\?/){|m| m.gsub($1, '')} 

str = "/bookings/hotels//Pune?arrival_date=....." 
str.gsub(/hotels(\/\/\w+)\?/){|m| m.gsub($1, '')} 

#=> "/bookings/hotels?arrival_date=....." 
0

gsub ("// Pune", "") Здесь не нужно 4 regexp.

+0

Ну, я должен сказать, извините, поскольку я не упомянул, что часть Пуны будет динамичной. Я отредактирую вопрос. – RamanSM

1

Я всегда использую URI library когда возиться с URL-адресами, он делает некоторые из беготни для вас (особенно, если строки запроса участвует).

Что-то вроде этого будет соответствовать вашей ситуации, хотя, вероятно, есть возможность получить правильный URL-адрес в первую очередь!

require 'uri' # probably not necessary if you are using Rails 

old_url = "/bookings/hotels//Pune?arrival_date=blahblah" 
uri  = URI(old_url) 

# remove everything between the first double '//' and the end of the string 
uri.path = uri.path.gsub(/\/\/.+\Z/, '') 
# => "/bookings/hotels" 

# output a new url using the new path but including the original query string 
new_url = uri.to_s 
# => "/bookings/hotels?arrival_date=blahblah"