2016-05-31 5 views
1

레일즈 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

당신은 당신이 한 문자열을 대체하기 때문에 IDEONE demo

를 참조

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 

으로 원하는 것을 얻을 수 있습니다, 당신은 gsub 필요하지 마십시오 sub 할 것입니다.

블록은 전체 일치 (즉, iDisplayStart 앞에있는 1 자리 이상의 숫자) 인 m을 가져 와서 블록 내부에 1000을 추가하는 int 값으로 변환합니다.

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

를 참조하십시오

또 다른 방법은 정규식을 사용 (또는 안전한 경기를 \b 추가) 및 블록 내부 Regexp.last_match[1]으로 캡처 vaalue에 액세스하는 것입니다

관련 문제