2013-08-15 2 views
2

"/ s_"를 "/ xl_"로 바꿔야하는 다른 이미지 URL이 있습니다. 필자는 여러 가지 방법을 시도했지만, 그 중 일부는 기대했던대로 작동하지 않는 것 같습니다.일부 문자열이 gsub로 대체됩니다.

available_images.each do |img| 
    img.gsub(/.*(\/s_).*\.jpg/, "\/xl_") 
end 

available_images 문자열의 수를 유지하는 배열입니다 : 여기 내 최신 버전입니다 (물론 제공되는 정규 표현식과 일치 :. * (/ s의 _) * JPG..). 어떻게 고칠 수 있습니까? 사전에

감사합니다!

답변

1

gsub! (대신 정규식의) 단순한 문자열로 작동합니다 (! 당신은 each 아닌 map 할 때문에) :

"path/to/s_image.jpg".gsub '/s_', '/xl_' 
# => "path/to/xl_image.jpg" 

업데이트

으로는 지적을 설명을 사용하면 경로에 '/s_'이 여러 번 포함되어 있으면 예기치 않은 문제가 발생할 수 있습니다.

"path/s_thing/s_image.jpg".sub %r|/s_(?!.*/)|, '/xl_' 
#=> "path/s_thing/xl_image.jpg" 
      △  ▲ 

그것은 단지 '/s_'의 마지막 발생을 대체

"path/s_thing/s_image.jpg".gsub '/s_', '/xl_' 
#=> "path/xl_thing/xl_image.jpg" 
      ▲  ▲ 

Borodin

는이 경우에 작동하는 좋은 짧은 정규식 대체를 기록했다.

+0

힌트를 보내 주셔서 감사합니다. 잘 작동합니다! – Severin

+0

아마도'sub'가 더 적절할 것입니다. – Borodin

+0

'sub'는 아마도'gsub'가 잘못된 것 같습니다. '/ s_'문자열이 여러 번 나타나는 경우 모두 예상치 못한 문제가 발생할 수 있습니다. 어쩌면'서브! /(.*)(?:\/s_)(.*\.jpg)/, "# {$ 1}/xl _ # {$ 2}"은 더 좋지만 (더 복잡합니다) – tessi

관련 문제