Rails 3 + регулярное выражение - заменить часть строки, 1 вхождение - PullRequest
1 голос
/ 02 марта 2011

Я новичок в Rails, а также в регулярных выражениях.Оглядывался, но я заблокирован ...

У меня есть такая строка:

Текущий: http://zs.domain.com/user_images/123456789/imageName_size.ext

Требуется: http://zs.domain.com/user_images/123456789/imageName.ext

Мне удалось добраться до этого:
http://a0.twimg.com/profile/1240267050/logo1.png
=> потерять все вхождения с

picture.gsub!(/_([a-z0-9-]+)/, '')

или вот так:

http://a0.twimg.com/profile_images/1240267050/logo1
=> изменить только последнее вхождение, но потерять расширение с помощью

picture.gsub!(/_([a-z0-9-]+)**.(png|gif|jpg|jpeg)**/, '')  

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Ты почти у цели.Второй параметр - это строка, с которой будет заменено совпадение, и вы можете повторно использовать сопоставленные группы из совпадения.Это поможет:

picture.gsub!(/_([a-z0-9-]+).(png|gif|jpg|jpeg)/, '.\2')

Для размещения дополнительных условий, указанных в комментарии:

picture.gsub!(/_([^\/]+).(png|gif|jpg|jpeg)/, '.\2')
0 голосов
/ 15 марта 2011

Ответ Маркибемы изменит строку

.../xxx_yyygifzzz/...,

на

.../xxxgifzzz/....

Во избежание этого вы можетесделать это:

picture.gsub!(/_[^\/]+(?=\.[^\.]+\z)/, '')
  • (?=...) понимается как контекст, следующий за строкой, и не будет включен в совпадение.
  • \z описывает конецстрока, поэтому это регулярное выражение безопасно использовать, если в некоторый промежуточный каталог включена строка, подобная приведенной выше.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...