2016-05-31 45 views
1

我正在使用Rails 4.2.3並嘗試執行正則表達式搜索和替換。如果我的變量開始時是這樣的...在Ruby中進行搜索和替換時遇到問題

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= 

我該怎麼做?

回答

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子,你不需要gsub,一個sub會做。

該塊取整個匹配(即位於iDisplayStart之前的一個或多個數字),m,並轉換爲一個int值,我們將1000添加到該塊內部。

另一種方法是使用您正則表達式(或添加\b一個更安全的比賽),並與Regexp.last_match[1]訪問塊內的捕獲vaalue:

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

相關問題