Ich versuche, einen Backbone-Router zu erstellen, der optionale Parameter abgleichen kann.
Betrachten Sie den folgenden Code:
%Vor%Wenn ich zu URL abc.com/ # / jobs / p104 / navigiere, ist der Seite Parameter 104 . Wenn Sie jedoch zu abc.com/ # / jobs / job / 93 navigieren, ist der Parameter job_id undefiniert , jedoch die Seite < Der Parameter / strong> ist 93 .
Der Backbone-Router stimmt also die Hash-Parameter der Routen grundsätzlich nach der Reihenfolge und nicht nach dem Namen ab.
Ich weiß, die Lösung wäre, ein * splat zu verwenden und die Parameter mit Regex zu teilen, aber ich kann nicht scheinen, dass der Regex-Teil funktioniert (mein Regex ist ziemlich rostig). Kann mir bitte jemand helfen?
Wenn es eine bessere Lösung als die Verwendung von * splat gibt, kann jemand bitte teilen?
probiere das (single regex, funktioniert bei all deinen Eingabeformaten)
%Vor% ** stimmt zuerst mit dem pNNN-Segment überein, wenn es dort ist, und verwendet einen nicht gierigen Quantifizierer mit Punkt .
, der alles .*?
essen kann, um die Zeichenfolge nacheinander hochzukrabbeln, so dass die zweite Gruppe (gerade / NNN) wird auch übereinstimmen, wenn vorhanden. Die (?: exp )
sind nicht einfangende Gruppen, sie gruppieren sich, aber sie "erinnern sich" an nichts.
Wenn Sie eine Menge davon tun, können Sie einen Blick auf dieses Muster um es ordentlich aufzuwickeln. Für genau diese sollten jedoch die folgenden Regexs es tun:
%Vor% Sie können dann String.match
mit den von Ihnen abgerufenen Splats verwenden, um die fraglichen URL-Fragmente zu extrahieren. Verwenden von Zeichenfolgen anstelle einer splat
-Variable:
Tags und Links javascript regex backbone.js routes