我正在使用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=
我该怎么做?
答案 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
也可以。{/ 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