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

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

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

У меня есть URL-адрес от kaminari:

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

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

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

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

-1
RamanSM 7 Сен 2016 в 16:00

3 ответа

Лучший ответ

Захват и замена с помощью 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=....."
1
Deepak Mahakale 7 Сен 2016 в 13:28

Я всегда использую библиотеку URI, когда бездельничаю с 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"
1
omnikron 7 Сен 2016 в 13:30

Gsub ("// Пуна", "") Здесь не нужно 4 регулярных выражения.

0
plombix 7 Сен 2016 в 13:14