2016-04-28 31 views
1

我有一些字符串看起來像任何這些提取的路線PARAMS「:」和一個「/」或空行結束是Rails的路線PARAMS。即:「challenge_id」和「:ID爲」如何使用Ruby

我想要做的兩件事情與此字符串

  • 提取路線PARAM變量爲紅寶石陣列以後使用
  • 替換那些PARAM變量由 '1'

因此,對於第一個例子輸出:

arr = [':challenge_id',':id']  
new string = '/challenges/1/submissions/1' 

我試過這個,b UT斯達康因爲我需要這在Ruby代碼運行它匹配一切

/[:[a-z*]]/ 

我在http://rubular.com/測試。

回答

2
arr = [] 
"/challenges/:challenge_id/submissions/:id".gsub(/:[^\/]+/){|s| arr.push(s); "1"} 
# => "/challenges/1/submissions/1" 
arr 
# => [":challenge_id", ":id"] 
+1

想如果我可以投兩次,這件事。簡潔,但完全可讀。 – ardochhigh

0

正則表達式應該是這樣的:

(:[A-Z] *)

()是爲捕獲基團。

「*」應該在字符類之外。

爲了改善當前的正則表達式,你可以這樣做:

(\ /:[AZ] +)

添加一個斜槓 「/」,所以不匹配「: 「在參數變量的中間,並將」*「運算符更改爲」+「,因此不能單獨匹配」:「。

2

如果你想匹配PARAMS可能有大寫字母在其中,那麼你可以使用\w速記:

:\w+ 

這將匹配所有PARAMS包括大寫字母的人。

# For example: 
/challenges/:Challenge_id/submissions/:ID 

Ruby代碼:

string = "/challenges/:challenge_id/submissions/:id" 

# To get a matching params array 
string.scan(/:\w+/)    # => [":challenge_id", ":id"] 

# To replace them with "1"s 
string.gsub(/:\w+/, '1')   # => "/challenges/1/submissions/1"