2013-08-22 58 views
1

網站我保持從標準的PHP URL格式移動:解析友好的URL在Javascript

http://example.com/page.php?key=value&key=value... 

一個更加搜索引擎友好的格式是這樣的:

http://example.com/page/key/value/key/value... 

我使用這個功能javascript添加,更新/修改舊格式的url字符串:

function UpdateQueryString(key, value, url) { 
    if (!url) url = window.location.href; 
    var re = new RegExp("([?|&])" + key + "=.*?(&|#|$)(.*)", "gi"); 

    if (re.test(url)) { 
     if (typeof value !== 'undefined' && value !== null) 
      return url.replace(re, '$1' + key + "=" + value + '$2$3'); 
     else { 
      return url.replace(re, '$1$3').replace(/(&|\?)$/, ''); 
     } 
    } 
    else { 
     if (typeof value !== 'undefined' && value !== null) { 
      var separator = url.indexOf('?') !== -1 ? '&' : '?', 
      hash = url.split('#'); 
      url = hash[0] + separator + key + '=' + value; 
      if (hash[1]) url += '#' + hash[1]; 
      return url; 
     } 
     else 
      return url; 
    } 
} 

這工作完美。現在這個函數突出了兩個不好的地方,javascript和正則表達式。我試圖修改這個函數來使用斜槓,'/'而不是? & =。這是我第一次嘗試它:

function myUpdateQueryString(key, value, url) 
{ 
    if (!url) url = window.location.href; 
    var re = new RegExp("([/])" + key + "(/)(.*)", "gi"); 

    if (re.test(url)) { 
     if (typeof value !== 'undefined' && value !== null) 
      return url.replace(re, '$1' + key + "/" + value + '$2$3'); 
     else { 
      return url.replace(re, '$1$3').replace(/(\/)$/, ''); 
     } 
    } 
    else { 
     if (typeof value !== 'undefined' && value !== null) { 
      var separator = '/', 
      hash = url.split('#'); 
      url = hash[0] + separator + key + '/' + value; 
      if (hash[1]) url += '#' + hash[1]; 
      return url; 
     } 
     else 
      return url; 
    }  
} 

此功能讓我非常接近。它會將新的鍵/值添加到url字符串中,但我在更新/修改字符串中的當前值時遇到問題。 我認爲它是一個簡單的修復。在正則表達式和其他一些事情中,我只能在$ 2 $ 3左右包裹我的頭。

感謝

我想我已經找到了答案 這似乎是工作,現在:

function UpdateQueryString(key, value, url) 
{ 
    if (!url) url = window.location.href; 
    var re = new RegExp("([/])" + key + "/.*?(/|$)", "gi"); 
    var separator = '/'; 
    if (url.match(re)) { 
     return url.replace(re, '$1' + key + "/" + value + '$2'); 
    } 
    else { 
     return url + separator + key + "/" + value; 
    } 
} 

有人能看到什麼錯呢?

回答

0

你可以這樣做嗎?

url.split('/?|&|=/').join('/'); 

這應該用斜槓替換URL中的所有問號,&符和等號。

+0

我不想替換?&和=。我正在尋找一種快速的方法來操縱JavaScript中的url字符串。每個庫和功能,我看到所有處理標準page.php?鍵=值。我正在尋找一種方式來處理url結構時,如url /鍵/值的url結構。我沒有發現任何東西。看來我正在使用的函數非常接近,只是正則表達式略微偏離。 – user2707535

+0

好吧,我仍然有幾個問題:1)當你說改變url字符串,你的意思是一個字符串傳遞給函數或瀏覽器的url欄中的實際url?如果它是前者,那麼在操作後你想用page/key/value字符串來完成什麼? 2)爲了澄清,你是否試圖將查詢字符串更改爲目錄結構,反之亦然? –

0
function UpdateQueryString(key, value, url) 
{ 
    if (!url) url = window.location.href; 
    var re = new RegExp("([/])" + key + "/.*?(/|$)", "gi"); 
    var separator = '/'; 
    if (url.match(re)) { 
     return url.replace(re, '$1' + key + "/" + value + '$2'); 
    } 
    else { 
     return url + separator + key + "/" + value; 
    } 
} 

這似乎工作。任何人都可以找到這個問題。我不是很擅長正則表達式或javascript