2016-04-28 11 views
1

を使用して、ルートのparamsを抽出しますparams。すなわち:「challenge_id」と「:ID」私はこの文字列で2つのことをしたいと思いは、どのように私はこれらのいずれかのように見えるいくつかの文字列を持っているRubyの

  • は、これらのparam変数を置き換える
  • 後で使用するためにRubyの配列にルートのparam変数を抽出'1'

だから、最初の例の出力によって:

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

私はこの、Bを試してみました私はRubyのコードで実行し、これを必要とするように私はhttp://rubular.com/でテストしています、それはすべて

/[:[a-z*]]/ 

をマッチングされるユタ。

答えて

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

は、これを2回まで投票します。簡潔ですが、完全に読める。 – ardochhigh

0

正規表現は、このようになります。

([-Z] *)

()キャプチャグループのためのものです。

"*"は文字クラス外にある必要があります。あなたの現在の正規表現を向上させるために

、あなたはこれを行うことができます:

(\ /:[AZ] +)

を前方を追加「、 "/" スラッシュなので、一致していません。 "を" + "に変更するので、": "だけに一致することはありません。

2

あなたは、あなたが\w速記使用することができ、それらの中に大文字を有していても良いのparamsを一致させたい場合は:

:\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" 
関連する問題