无法在Ruby中进行搜索和替换

时间:2016-05-31 16:44:29

标签: regex ruby-on-rails-4 replace

我正在使用Rails 4.2.3并尝试进行正则表达式搜索和替换。如果我的变量开始如此...

url = “http://results.mydomain.com/json/search?eventId=974&subeventId=2320&callback=jQuery18305053194007595733_1464633458265&sEcho=3&iColumns=13&sColumns=&iDisplayStart=1&iDisplayLength=100&mDataProp_0=“

然后我通过

运行它
display_start = url.match(/iDisplayStart=(\d+)/).captures[0] 
display_start = display_start.to_i + 1000
url = url.gsub(/iDisplayStart=(\d+)/) { display_start }     

结果是

http://results.mydomain.com/json/search?eventId=974&subeventId=2320&callback=jQuery18305053194007595733_1464633458265&sEcho=3&iColumns=13&sColumns=&1001&iDisplayLength=100&mDataProp_0=

但我想要的是简单地用我的新值替换“iDisplayStart”参数,所以我希望结果是

http://results.mydomain.com/json/search?eventId=974&subeventId=2320&callback=jQuery18305053194007595733_1464633458265&sEcho=3&iColumns=13&sColumns=&1001&iDisplayStart=1001&iDisplayLength=100&mDataProp_0=

我该怎么做?

1 个答案:

答案 0 :(得分:0)

你可以用

达到你想要的效果
url = "http://results.mydomain.com/json/search?eventId=974&subeventId=2320&callback=jQuery18305053194007595733_1464633458265&sEcho=3&iColumns=13&sColumns=&iDisplayStart=1&iDisplayLength=100&mDataProp_0="
display_start = url.sub(/(?<=iDisplayStart=)\d+/) {|m| m.to_i+1000}
puts  display_start

请参阅IDEONE demo

由于您替换了1个子字符串,因此您不需要gsubsub也可以。{/ p>

该块接受整个匹配(即位于iDisplayStart之前的一个或多个数字),m,并转换为我们将1000添加到内部的int值块。

另一种方法是使用正则表达式(或添加\b以获得更安全的匹配)并在块中使用Regexp.last_match[1]访问捕获的值:

url = "http://results.mydomain.com/json/search?eventId=974&subeventId=2320&callback=jQuery18305053194007595733_1464633458265&sEcho=3&iColumns=13&sColumns=&iDisplayStart=1&iDisplayLength=100&mDataProp_0="
display_start = url.sub(/\biDisplayStart=(\d+)/) {|m| "iDisplayStart=#{Regexp.last_match[1].to_i+1000}" }
puts  display_start

请参阅this IDEONE demo