2017-04-06 52 views
0

這是我想用正則表達式解析完整的字符串:正則表達式是一個問號會忽略一切

example.com/newsite.com.html?var=/newsite.com&var=newsite.com 

我希望能夠匹配字符串,但僅當newsite.com一部分它不會出現在?符號之後。

目前,我只迄今爲止得到:

/newsite.com/g 

,其選擇newsite.com,而不只是第一個所有實例。

鏈接到正則表達式操場http://regexr.com/3fmre

編輯:

這裏*代表一切,我想忽略,實際上僅匹配的newsite.com第一次出現:

example.com/newsite.com.html?**************************** 
+0

'[^?] *'除了'會匹配所有內容嗎?' – Havenard

+0

謝謝,但我會如何使用它? – Rtsne42

回答

0

這是我想出了一個解決方案,它不是防彈但工程大部分:

(?<=[^=]\/)newsite\.com 

它忽略了什麼,以=開頭,並且在開始時沒有/

請注意,這隻適用於支持「積極lookbehind」正則表達式實現。

0

你可以使用[^?]這是一個排除組,它匹配除了它中指定的每個符號,在這個案例a ?。例如,表達式/^[^?]*/將從一開始就匹配所有內容,直到找到一個?(這不會是匹配的一部分)。

如果你希望它匹配來自newsite.com纔剛剛開始,你可以使用/newsite\.com[^?]*/,或從?到最後,你可以使用/[^?]*$/

既然您標記了mod-rewrite,您也可以選擇使用%{QUERY_STRING}作爲條件。查詢字符串基本上就是我們在完整URL中調用?之後的內容。

例如,使用RewriteCond %{QUERY_STRING} newsite.com將意味着如果在查詢字符串上找到newsite.com,則此條件下的RewriteRule僅適用。

+0

謝謝,但它似乎沒有工作。在'''newsite.com'出現後,我試圖忽略所有內容' – Rtsne42

+0

@ Danchm01也許你應該告訴我們你想要做什麼。 – Havenard

+0

感謝您指出'%{QUERY_STRING}'這可能實際上是有用的。至於正則表達式,你的例子匹配'newsite.com',然後不匹配'newsite.com?',但我想要做的是忽略'?'後的所有內容,就像'newsite.com.html'一樣? **************''*是什麼被忽略的地方 – Rtsne42

-1

下面是做這件事的兩種方式..

 var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com"; 
 
//1. Look for ? and get the substring from 0 to the foundAt value 
 
     var foundAt = str.indexOf('?'); 
 
      document.getElementById("substr").innerHTML = str.substr(0,foundAt); 
 
      
 
//2. Using regex find the location of occurence of newsite.com and ignore rest   
 
var str = "example.com/newsite.com.html?var=/newsite.com&var=newsite.com"; 
 
    var loc = str.search(/newsite\.com[^?]*/); 
 
    document.getElementById("substr").innerHTML = loc;
<p id="substr"></p>

+0

感謝您的回答,這將是一個解決方案,但我只能使用正則表達式而不是完整的編程語言。所以我不能使用JavaScript並用數組索引截斷字符串。 – Rtsne42

+0

崗位被標記的Apache/MOD-改寫所以有參與或可在此點 – Capsule

2

你可以使用一個RewriteCond,只有REQUEST_URI測試。 QUERY_STRING不是REQUEST_URI一部分,因此,這樣的:

RewriteCond %{REQUEST_URI} newsite\.com 
RewriteRule your rules if the cond if matched 
+0

這實際上是我想要現在做的是沒有JS,但我堅持,因爲我想有一個通用名稱,像這樣:'的RewriteCond %{REQUEST_URI}%{SERVER_NAME}'但它似乎不起作用,我不知道爲什麼。條件的第二部分是否允許變量? – Rtsne42

+0

而且,如果他們工作,我將如何逃避變量值中間的點?附: 'REQUEST_URI' **確實包含'QUERY_STRING',但這並不重要,因爲我總是可以單獨在查詢字符串中測試'!newsite \ .com'。 – Rtsne42

+0

它不應該包含它根據Apache的手冊:「REQUEST_URI 所請求的URI的路徑組件,如」/index.html「,這顯着排除了可用作其自己的變量名爲QUERY_STRING的查詢字符串。 http://httpd.apache.org/docs/current/mod/mod_rewrite.html – Capsule