Как удалить подстроку, которая может появиться внутри строки? - PullRequest
2 голосов
/ 20 мая 2019

Мне нужно упростить строки url для некоторых отчетов, и иногда в наших строках url в разные части вставляется gclid params:

https://www.website.com/colors/blue?src=camp_id1&gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-oRGEPuO5UuUaAnZi2zD7yQU684aAo3KEALw_wcB

или

https://www.website.com/colors/blue?gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-oRGEPuO5UuUaAnZi2zD7yQU684aAo3KEALw_wcB&src=camp_id1

или

https://www.website.com/colors/blue?page=2&gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-oRGEPuO5UuUaAnZi2zD7yQU684aAo3KEALw_wcB&src=camp_id1

или

https://www.website.com/colors/blue?page=2&src=camp_id1

Так что есть все эти варианты URL. Иногда они содержат gclid, а иногда нет. Они часто находятся в разных частях URL.

Какой самый простой способ в ruby ​​напечатать строку без подстроки gclid, если она есть?

Ответы [ 3 ]

3 голосов
/ 20 мая 2019
.sub(/[\?&]gclid=[^&]*/, '')
1 голос
/ 20 мая 2019

Я бы рекомендовал использовать для этого библиотеку URI, чтобы вы могли просто проанализировать часть запроса:

uris = ["https://www.website.com/colors/blue?src=camp_id1&gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-oRGEPuO5UuUaAnZi2zD7yQU684aAo3KEALw_wcB",
"https://www.website.com/colors/blue?gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-oRGEPuO5UuUaAnZi2zD7yQU684aAo3KEALw_wcB&src=camp_id1",
"https://www.website.com/colors/blue?page=2&gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-oRGEPuO5UuUaAnZi2zD7yQU684aAo3KEALw_wcB&src=camp_id1",
"https://www.website.com/colors/blue?page=2&src=camp_id1"
]

uris.map do |s| 
  uri = URI.parse(s)
  query_params = uri.query.scan(/\w+(?==)[^&]*/).reject{|s| s.start_with?('gclid')}
  uri.query = query_params.empty? ? nil : query_params.join('&')
  uri.to_s
end

# => ["https://www.website.com/colors/blue?src=camp_id1", 
#     "https://www.website.com/colors/blue?src=camp_id1", 
#     "https://www.website.com/colors/blue?page=2&src=camp_id1",  
#     "https://www.website.com/colors/blue?page=2&src=camp_id1"]
1 голос
/ 20 мая 2019

Если все, что вам нужно, это базовый URL, который вы можете сделать:

url = your_url_string
trimmed_url = url[0, url.index("?")]

Или вы можете защитить строки без параметров запроса:

url = your_url_string
trimmed_url = url[0, (url.include?('?') ? url.index("?") : url)]

Возможно, есть способ сделать это и с URI ...

Если все, что вам нужно сделать, это удалить этот параметр, см. Ответ: Параметры URL для замены строки в Rails

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...