8

Backbone練習のために、ルーターのようなものを作ることにしました。ユーザーは正規表現文字列 liker'^first/second/third/$'を指定してから、それを にフックするだけViewです。

たとえば、次のRegExpようなものがあるとします。

String regexString = r'/api/\w+/\d+/';
RegExp regExp = new RegExp(regexString);
View view = new View(); // a view class i made and suppose that this view is hooked to that url

そして、その正規表現に一致するHttRequestポイントと/api/topic/1/、そのURLへのフックをレンダリングできます。

問題は、上記の正規表現から、それと値が\w+andであることをどのように知るかです。\d+topic1

誰か私にいくつかの指針を教えてください。ありがとうございました。

4

1 に答える 1

19

抽出したいパーツをグループに分けて、マッチから抽出できるようにする必要があります。これは、パターンの一部を括弧で囲むことによって実現されます。

// added parentheses around \w+ and \d+ to get separate groups 
String regexString = r'/api/(\w+)/(\d+)/'; // not r'/api/\w+/\d+/' !!!
RegExp regExp = new RegExp(regexString);
var matches = regExp.allMatches("/api/topic/3/");

print("${matches.length}");       // => 1 - 1 instance of pattern found in string
var match = matches.elementAt(0); // => extract the first (and only) match
print("${match.group(0)}");       // => /api/topic/3/ - the whole match
print("${match.group(1)}");       // => topic  - first matched group
print("${match.group(2)}");       // => 3      - second matched group

ただし、指定された正規表現は"/api/topic/3/ /api/topic/4/"アンカーされていないため一致し、2 つの一致 (2matches.lengthになります) - 各パスに 1 つなので、代わりにこれを使用することをお勧めします。

String regexString = r'^/api/(\w+)/(\d+)/$';

これにより、正規表現が文字列内のどこかだけでなく、文字列の最初から最後まで正確に固定されます。

于 2013-05-13T13:47:09.193 に答える