2013-08-29 17 views
5

Ciao Sto cercando di abbinare un URL specifico che consente stringhe di query. Fondamentalmente ho bisogno di quanto segue per accadere:Regex per abbinare URL specifico con stringa di query

  • http://some.test.domain.com - Passare
  • http://some.test.domain.com/ - Passare
  • http://some.test.domain.com/home - Passare
  • http://some.test.domain.com/?id=999 - Passare
  • http://some.test.domain.com/home?id=888&rt=000 - Passare
  • http://some.test.domain.com/other - Fail
  • http://some.test.domain.com/another?id=999 - Errore

Ecco quello che ho finora:

var pattern = new RegExp('^(https?:\/\/some\.test\.domain\.com(\/{0,1}|\/home{0,1}))$'); 
if (pattern.test(window.location.href)){ 
    console.log('yes'); 
} 

Il codice sopra funziona solo per i primi tre e non per le stringhe di query. Qualsiasi aiuto sarebbe apprezzato. Grazie.

+1

Può spiegare il motivo per cui coloro che passano passaggio e perché quelli che non riescono? Qual è la logica qui? Solo nulla e '/ home' è permesso? –

+0

@JamesMontagne Voglio solo che le prime cinque condizioni funzionino. Qualcos'altro dovrebbe fallire. –

+0

@progenhard Sì, ho anche bisogno di ottenere i primi cinque collegamenti per passare. –

risposta

4

Un modello come questo dovrebbe funzionare (almeno per il dominio specifico)

/^http:\/\/some\.test\.domain\.com(\/(home)?(\?.*)?)?$/ 

Questo corrisponderà un letterale http://some.test.domain.com eventualmente seguito da tutti di un letterale /, facoltativamente seguito da un valore letterale home, facoltativamente seguito da un valore letterale ? e qualsiasi numero di altri personaggi.

È possibile testare here

+0

Proverei a farlo solo con un uomo del gruppo di cattura. – progrenhard

+0

@progenhard Non mi è chiaro che l'OP si preoccupa di catturare i gruppi, ma certo, ognuno dei gruppi potrebbe essere trasformato in gruppi non di cattura abbastanza facilmente (ad esempio '... (?: \/(?: home)? (? : \?. *)?)? $/') –

+0

Il codice usa' pattern.test'. Non riesco a pensare a nessuna ragione che possa importare se i gruppi stanno catturando o meno. –

1

Non utilizzare un Regex, utilizzare un parser di URL. Si potrebbe utilizzare purl

Poi, farete:

url = "http://some.test.domain.com/home" // Or any other 
purl(url).attr('path') // is equal to "home" here. 

avrete solo bisogno di controllare .attr('path') contro i tuoi percorsi accettati (apparentemente "", "/", e "home").


Ecco alcuni esempio di output:

purl("http://some.test.domain.com/?qs=1").attr('path') 
"/" 
purl("http://some.test.domain.com/other").attr("path") 
"/other" 
purl("http://some.test.domain.com/home").attr("path") 
"/home" 
+0

'# commenta questo;' – Qtax

+0

@Qtax Haha grazie, stavo pensando in Python per qualche motivo: l –

+0

@ThomasOrozco Grazie per l'input, ma sono limitato a jQuery 1.9 –

Problemi correlati