Как лучше это сделать?
В идеале, используя какой-нибудь класс анализа URI, а не полагаться на мой собственный регулярный код
url = "http://example.com" //or "http://example.com?after=111" next_url = url.gsub(/after=\d+/,"666") if !next_url.eql?(url) if (new2.include?('?') == false) next_url = url + "?after=666" else next_url = url + "&after=666" end end puts next_url
Я рекомендую использовать гем Addressable , когда вы разбираете URL-адреса или собираете их вместе. Он очень всеобъемлющий и имеет query_values(options = {}) и query_values=(new_query_values) для извлечения всех компонентов запроса в хеш или для его перестроения из хеша. Он также будет обрабатывать декодирование и кодирование параметров по мере необходимости, то, что URI не сделает для вас.
query_values(options = {})
query_values=(new_query_values)
Существует библиотека Ruby с именем URI, которая обрабатывает парсинг и создание URL-адресов.
URI
Не уверен в своем вопросе, но вы, вероятно, хотите что-то подобное?
path, query = url.split('?') query = (query||'').scan(/(.+)=(.+)/).map{|k, v| "#{k}=#{k == 'after' ? 666 : v}"}.join('&') puts [path, query].join('?')