2014-02-12 64 views
-2

我想从一个类名获取资源名称,如:重构正则表达式Ruby代码

“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"