网站我保持从标准的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)为了澄清,你是否试图将查询字符串更改为目录结构,反之亦然? –