2013-08-29 29 views
5

嗨我想匹配允許查詢字符串的特定URL。基本上我需要以下情況發生:使用查詢字符串匹配特定網址的正則表達式

  • http://some.test.domain.com - 通過
  • http://some.test.domain.com/ - 通過
  • http://some.test.domain.com/home - 通過
  • http://some.test.domain.com/?id=999 - 通過
  • http://some.test.domain.com/home?id=888&rt=000 - 通過
  • http://some.test.domain.com/other - 失敗
  • http://some.test.domain.com/another?id=999 - 失敗

這是我到目前爲止有:

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

上面的代碼只對前三個而不是爲查詢字符串。任何幫助,將不勝感激。謝謝。

+1

你能解釋爲什麼那些通過通過,爲什麼那些失敗失敗?這裏的邏輯是什麼?只有什麼,並允許'/ home'? –

+0

@JamesMontagne我只想要前五個條件工作。其他任何事情都會失敗。 –

+0

@progenhard是的,我還需要獲得前五個鏈接才能通過。 –

回答

4

這樣的模式應該工作(至少在特定域)

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

這將匹配一個http://some.test.domain.com任選隨後進行的所有的字面/,可選地接着是文字home,可選地接着是文字?和任何數量的其他字符。

你可以測試它here

+0

我會嘗試使它只與一個捕獲組的人。 – progrenhard

+0

@progenhard我不清楚OP是否關心捕獲組,但是可以肯定的是,任何組都可以很容易地變成非捕獲組(比如'...(?:\ /(?: home)?(? :\?。*)?)?$ /') –

+0

該代碼使用'pattern.test'。我想不出任何理由,如果團隊正在捕捉或不捕捉,這將是重要的。 –

1

不要使用正則表達式,請使用URL解析器。你可以使用purl

然後,你會做:

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

你只需要檢查.attr('path')對你的接受路徑(貌似"""/",並"home")。


下面是一些示例輸出:

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

'#comment this;' – Qtax

+0

@Qtax哈哈謝謝,我在Python中出於某種原因想:l –

+0

@ThomasOrozco感謝您的輸入,但我僅限於jQuery 1.9 –