2014-02-12 100 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"