2013-10-17 102 views
0

我正在檢查URL中的特定模式,以便僅在正確的頁面類型上執行一組代碼。目前,我有這樣的:檢查當前URL,即使有URL參數也返回true

/^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/;

因此,它會爲example.comexample.com/example/anythinghere/返回true。然而,有時本網站將附加參數,如?postCount=25或一些東西到URL的末尾,這樣就可以獲得:

example.com/example/anythinghere/?postCount=25

正因爲如此,如果我把當前的表達式爲條件,將返回如果有URL參數,則爲false。我如何才能最好地改變正則表達式以允許可選的 URL參數通配符,因此,如果存在問號後跟隨任何附加信息,它將始終返回true,並且如果省略它,它仍然會返回true?

這將需要爲返回true:

http://www.example.com/?argumentshere

http://www.example.com/example/anythinghere/?argumentshere

以及這些相同的URL 沒有額外的參數。

+0

將''放在最後,將'$'改爲'(\?| $)'(因此最終看起來像是......「[^ \ /] + \/)?(\?| $)' – Wrikken

+0

工程就像一個魅力!如果您想將其作爲正式答案,我很樂意提供適當的謝意。 – JTApps

回答

1

嘗試以下的正則表達式:

^http:\/\/www\.example\.com(?:\/example\/[^\/]+\/?)?\??.*$ 

regex101 demo

+0

明天就試試看,回覆你! – JTApps

0

升級我一個答案評論:

/^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/; 

Meanse:

/^ # start of string 
     http:\/\/www\.example\.com\/ #literal http://www.example.com/ 
     (?:   
     example\/[^\/]+\/? #followed by example/whatever (optionally closed by /) 
    )? 
     $ end-of-string 
/

這裏的主要問題,是你的要求(「跟着一個可選的查詢字符串」)不匹配您的正則表達式(這需要結束串的)。我們通過以下方式解決它:

/^ # start of string 
     http:\/\/www\.example\.com\/ #literal http://www.example.com/ 
     (?:   
     example\/[^\/]+\/? #followed by example/whatever (optionally closed by /) 
    )? 
     (\?|$) followed by either an end-of-string (original), or a literal `?` (which in url context means the rest is a query string and not a path anymore). 
/
相關問題