2014-02-12 10 views
-2

Я хочу, чтобы получить имя ресурса от имени класса, как:рефакторинга регулярного выражения рубин код

«SequelAdapter :: UserGraph»

Так что я хочу пользователя в этом случае.

В настоящее время у меня есть этот код, который делает работу, но очень некрасиво:

klass = object.class.to_s 

if start = klass =~ /[::][A-Za-z]*Graph/ 
    finish = klass =~ /Graph/ 

    klass = klass[start + 1, finish - start - 1] 
end 

Может кто-нибудь предложить лучший способ?

+0

См. Некоторые обновления =) –

ответ

1

Общие решение:

object = SequelAdapter::UserGraph.new 
/(?<klass>[A-Za-z]*)Graph/.match(object.class.to_s)[1] 
klass # => "User 

Для , попробуйте следующее:

/(?<klass>[A-Za-z]*)Graph/ =~ object.class.to_s 
klass # => "User 

если вы хотите более точную :

object = SequelAdapter::UserGraph.new 
/(?<klass>[A-Z](?:[[[:alpha:]]])*)*Graph/ =~ object.class.to_s 
klass # => "User 
1

попробовать это:

klass = object.class.to_s.match(/(\w+)Graph$/).captures[0] 
klass 
=> "User" 
Смежные вопросы