Ruby on rails 如何删除可能出现在字符串中的子字符串?

Ruby on rails 如何删除可能出现在字符串中的子字符串?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我需要简化一些报告的url字符串,有时我们的url字符串在不同的部分烘焙了gclidparams: https://www.website.com/colors/blue?src=camp_id1&gclid=Cj0KCQjwoInnBRDDARIsANBVyASfVUCg4ShKaAq4q8cX6xgB4kYj-ORGEPUO5UUUAANZI2ZD7YQU684AAO3EALW_wcB 或 https://www.website.com/colors/blue?gclid=Cj0KCQjwo

我需要简化一些报告的url字符串,有时我们的url字符串在不同的部分烘焙了
gclid
params:

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

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

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

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

因此,URL有所有这些变化。有时它们包含
gclid
,有时则不包含。它们通常位于url的不同部分


在ruby中,如果有
gclid
子字符串,那么打印字符串最简单的方法是什么?

如果您只需要一个基本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
来实现这一点


如果您只需要删除该参数,请参见以下答案:

我建议您使用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"]

我需要保留其他参数,但只需去掉gclid。不必在字符类中转义问号。请记住,从教育的角度来看,您正在指导读者(不阅读注释:-)必须转义字符类中的问号。
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"]