2012-08-28 49 views
-2

可能重複:
Get query string values in JavaScriptJavascript - 你會如何將這種模式進行正則表達。似乎無法做到這一點

我「不得不」這個模式,但它並沒有完全給我我需要什麼,但它的工作。

var regex = new RegExp('\\b' + data.keyword + '(=[^&]*)?(&|$)',"gi"); 

但下面的正則表達式 「是」 我需要什麼,但我似乎無法得到它的正則表達式OBJ內工作: /& dyanmicTxtHere(\ = [^ &] )(? ?= & | $)|^dyanmicTxtHere(\ = [^ &])(& | $)/

我想:這是行不通的 -

var regex = new RegExp('&' + data.keyword + '(=[^&]*)?|^' + data.keyword + '(=[^&]*)?&?',"gi"); 

我不明白爲什麼。所以上面的正則表達式應該刪除我傳遞的param(和vlaue)(data.keyword),並處理?和&,無論param位於url中。它

那麼,這會匹配什麼?

www.someurl.com?Keyword=foo

www.someurl.com?up=down &關鍵字= FOO

www.somurl.com?up=down &關鍵字= FOO &左= right

etc ...所以,如果我通過「關鍵字」作爲我的動態參數,那麼它會刪除它及其相關的值。

+1

你想從什麼(排序)字符串匹配什麼? –

+0

編輯它將匹配的原始問題。 –

+0

爲什麼有人會拒絕我的問題?它措辭不恰當嗎?沒有足夠的信息?有點蹩腳.. –

回答

1

顯然以下不是正則表達式;但它應該,我認爲,滿足您的要求。它利用GET查詢字符串中名稱 - 值對的要求,並使用簡單的字符串和一些數組操作來檢查來自傳遞的URL的各種(如果有的話)名稱 - 值對:

function removeParam(url, param) { 
    // checks for the existence of a '?' in the passed url: 
    var queryAt = url.indexOf('?') + 1; 
    /* function exits if: 
     1. no 'url' parameter was passed, 
     2. no 'param' parameter was passed in, or 
     3. the 'queryAt' variable is false, or has a falsey value */ 
    if ((!url || !param) || !queryAt) { 
     return false; 
    } 
    else { 
     /* if the 'param' passed in wasn't found in the 'url' variable, 
      the function exits, returning the original url (as no modification 
      is required */ 
     if (url.indexOf(param) == -1) { 
      return url; 
     } 
     else { 
       /* gets the substring of the url from the first 
        character *after* the '?' */ 
      var all = url.substring(queryAt), 
       // creates an array of the name and value pairs 
       nameValues = all.split('&'), 
       // creating a new array 
       newNameValues = [], 
       parts; 
      // iterates through each name-value pair 
      for (var i = 0, len = nameValues.length; i < len; i++) { 
       // splits the name-value pair into two parts 
       parts = nameValues[i].split('='); 
       /* if the first part (the 'name' of the param) does not 
        matches what you're looking for then the whole name-value 
        pair is pushed into the 'newNameValues' array */ 
       if (parts[0] !== param) { 
        newNameValues.push(nameValues[i]); 
       } 
      } 
      // returns the reconstructed URL 
      return url.substring(0, queryAt) + newNameValues.join('&'); 
     } 
    } 
} 

JS Fiddle demo

3

在我看來,你想要的是通過JavaScript讀取請求中的參數值,正確嗎?使用這種

嘗試:

function getParameterByName(name) 
{ 
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
    var regexS = "[\\?&]" + name + "=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.search); 
    if(results == null) 
     return ""; 
    else 
     return decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

this question服用。

+0

我真的不想「讀」參數,我希望能夠刪除一個和它的值。我想刪除的那個可以動態決定。 所以,我通過我paramToDelete和我的正則表達式(上面張貼)將剝離它和它的價值。 –

+0

因此,您可以通過讀取所有參數減去要排除的參數輕鬆地重建查詢字符串。在我鏈接的問題中,還有其他函數一次檢索所有參數。 – Apoc

1

如果你需要看所產生的正則表達式是什麼樣子,只需撥打regex.toString()

如果你這樣做,在一個你嘗試過你:

/&dyanmicTxtHere(=[^&]*)?|^dyanmicTxtHere(=[^&]*)?&?/gi 

此基礎上,你可以比較看看有什麼需要改變,使其像你所提供的正則表達式:

var regex = new RegExp('&' + data.keyword + '(\\=[^&])?(?=&|$)|^' + data.keyword + '(\\=[^&])?(&|$)', ''); 

如果我們在調用toString我們得到:

/&dyanmicTxtHere(\=[^&])?(?=&|$)|^dyanmicTxtHere(\=[^&])?(&|$)/ 

如果這不起作用,請嘗試解釋您正在嘗試解析的內容。

相關問題