2015-05-11 110 views
0

我正在使用正則表達式向頁面添加調查,並且我希望將它包括在除付款和登錄頁面以外的所有頁面上。我不能使用正則表達式來查找,所以我試圖使用以下,但它不工作。排除在正則表達式中包含字符串的URL

^/.*[^(credit|signin)].* 這應該捕獲除包含信用卡或簽到

+0

解釋一下你的意思是「不工作」,以及爲什麼你認爲這個正則表達式與URL有關。 –

+0

@ScottHunter我會繼續看到帶有「信用」字樣的網址,並使用工具檢查器登錄。正則表達式是允許以最佳方式確定放置位置的輸入。 –

+0

@chrislipsit,請用您正在使用的正則表達式的語言來標記您的問題。 – zzzzBov

回答

1

[的所有URL表示字符類的開始和[^否定是每個字符。因此,你的正則表達式是「任何字符都不在這個類中,後面跟着任何東西」,這很可能與任何東西匹配。

由於您使用的是特定的字符串,因此我認爲這裏不適用正則表達式。這將是一個簡單得多,檢查creditsignin不要在字符串中存在,如使用JavaScript:

-1 === string.indexOf("credit") && -1 === string.indexOf("signin") 

或者你可以檢查一個正則表達式不比賽

false === /credit|signin/.test(string) 
0

在正則表達式的白名單的話一般是很容易的,並通常遵循的一種形式:

^.*(?:option1|option2).*$ 

圖案分解爲:

  • ^ - 串的開始
  • .* - 0或多個非換行符*
  • (?: - 開放非捕獲組
    • option1|option2 - |分隔的列表的白名單選項
  • ) - close non-capt uring組
  • .* - 0或多個非換行符
  • $ - 串的端

在一個正則表達式黑名單詞語是更復雜一些理解,但可以沿一個圖案來進行行:

^(?:(?!option1|option2).)*$ 

模式分解爲:

  • ^ - 串的開始
  • (?: - 開放非捕獲組
    • (?! - 開放負先行(字符串中的下一個字符不得匹配包含在負先行的值)
      • option1|option2 - |的選項分隔列表黑名單
    • ) - 接近負前瞻
    • . - 單個非換行符*
  • ) - 緊密的,非捕獲組
  • * - 重複組0或更多次
  • $ - 串的端

基本上這種模式檢查黑名單中的值不會出現在字符串中的任何點。

*確切字符取決於語言,所以謹慎使用


的最終版本:

/^(?:(?!credit|signin).)*$/ 
+0

Regex101.com說不用下面的參考串匹配 「/東西/信貸 /RARS /信貸 /我的賬戶/ ARIST /登入 /胡說/ bjah /登入」 –

+1

@chrislipsit,但我的朋友鮑勃說這會工作!沒有認真,寫一些代碼,並檢查自己。 '['/stuff/credit','/rars','/credit','/my-account/arist/signin','/blah/bjah/signin'].map(function(val){ return/^(?:(?! credit | signin)。)* $ /。test(val) });' – zzzzBov

相關問題