我维护的网站正在从标准的 php url 格式转变:
http://example.com/page.php?key=value&key=value...
到一个更 seo 友好的格式,像这样:
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 美元左右。
谢谢
我想我已经找到了答案这似乎现在有效:
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;
}
}
有人能看出这有什么问题吗?