2013-04-07 26 views
0

我正在查看Michael Hartl's online book,並在他的Guardfile中遇到過這個正則表達式行。m [1] [/ _ pages /]在Guardfile中

watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m| 
    ["spec/routing/#{m[1]}_routing_spec.rb", 
    "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", 
    "spec/acceptance/#{m[1]}_spec.rb", 
    (m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" : 
         "spec/requests/#{m[1].singularize}_pages_spec.rb")] 

什麼是最後一位做:

(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" : "spec/requests/#{m[1].singularize}_pages_spec.rb")]

我得到m[1]將是控制器的名稱,但到底是什麼的[/_pages/]部分完成?

回答

0

你可以使用正則表達式來獲取字符串中的子串。如果沒有找到匹配項,則返回第一個匹配項或nil

string = "foobar" 
string[/[ab]/] # => "b" 
string[/ab/] # => nil 

但是,邁克爾使用它作爲一個簡單的檢查,如果正則表達式匹配。您可能已經看到它用=~運營商編寫:

m[1] =~ /_pages/ ? something : something_else 
相關問題