網站我保持從標準的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;
}
}
有人能看到什麼錯呢?
我不想替換?&和=。我正在尋找一種快速的方法來操縱JavaScript中的url字符串。每個庫和功能,我看到所有處理標準page.php?鍵=值。我正在尋找一種方式來處理url結構時,如url /鍵/值的url結構。我沒有發現任何東西。看來我正在使用的函數非常接近,只是正則表達式略微偏離。 – user2707535
好吧,我仍然有幾個問題:1)當你說改變url字符串,你的意思是一個字符串傳遞給函數或瀏覽器的url欄中的實際url?如果它是前者,那麼在操作後你想用page/key/value字符串來完成什麼? 2)爲了澄清,你是否試圖將查詢字符串更改爲目錄結構,反之亦然? –