2012-08-04 14 views
6

ルータを構築する必要があります.RESTリクエストを正しいコントローラとアクションにルーティングします。ここではいくつかの例:Javascriptルーティング正規表現

POST /users 
GET /users/:uid 
GET /users/search&q=lol 
GET /users 
GET /users/:uid/pictures 
GET /users/:uid/pictures/:pid 

ルーティングが不可欠とリクエストごとに行われているので、単一の正規表現を持つことが重要で、できるだけ良いです。

私たちはまず、urlで正規表現を使って(最後まで、または次のスラッシュ/)まで置き換えなければなりません。その後、リクエストURLでそのURLを検証できます。

どのようにこれらの動的ルーティングをregexに置き換えることができますか? ":"で始まり "/"で終わる文字列、 "&"という文字列を検索するようにします。

これは私が試したものです:それは動作しません何らかの理由で

var fixedUrl = new RegExp(url.replace(/\\\:[a-zA-Z0-9\_\-]+/g, '([a-zA-Z0-0\-\_]+)')); 

。正規表現にidを置き換える正規表現を実装するにはどうすればよいですか、または実際のリクエストURLと比較するときには無視します。ヘルプ

答えて

12

ため

おかげで、私は(当時/と空白を除いて、できるだけ多くの文字として、試合:)をコロンで始まるマッチングパラメータについて:[^\s/]+を使用すると思います。

代わりに、一致するパラメータを使用することをお考えの場合は、([\\w-]+)を使用して、任意の英数字(-および_)をキャプチャグループに一致させています。

var route = "https://stackoverflow.com/users/:uid/pictures"; 
var routeMatcher = new RegExp(route.replace(/:[^\s/]+/g, '([\\w-]+)')); 
var url = "https://stackoverflow.com/users/1024/pictures"; 

console.log(url.match(routeMatcher)) 
+1

アンダーライン(_)が '([\\ w - ] +)'にないと思いますか? –