gpt4 book ai didi

javascript - JS 正则表达式 : modify updateQueryString function to handle hash and empty values

转载 作者:行者123 更新时间:2023-12-02 17:42:01 28 4
gpt4 key购买 nike

这个方便的函数添加和修改 URL 中的键/值,是 posted由用户 Joshua Stewardson :

function updateQueryString(key, value) {
if (!uri) var uri = window.location.hash;
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
};

(我在原来的基础上稍作修改)。

它满足了我的需要,除了两件事:

一:我将其用于位置哈希。我有一个函数,可以一键向 URL 添加三个键值,但我不知道如何阻止它添加“?”哈希后,例如:

http://localhost/product-list?minify=false#?catId=2&prodId=3&subId=4

修改行

var separator = uri.indexOf('#') !== -1 ? "&" : "#"; // modified

解决“?”问题问题,但忽略第一个键值并在末尾再次添加它,例如

http://localhost/product-list?minify=false#?catId=1&prodId=2&subId=3&catId=2

二:我想修改该函数,以便在值为空 ('') 或 null 时删除该键,例如:

updateQueryString('catId','') || updateQueryString('catId',null)

我的正则表达式技能还不够敏锐。任何帮助表示赞赏。

谢谢。

部分答案

我回答了问题的第 1 部分。修改后的代码如下:

updateQueryString = function (key, value) {
if (!uri) var uri = window.location.hash;
var re = new RegExp("([#|&])" + key + "=.*?(&|$)", "i"); // added "or" and added hash
var separator = uri.indexOf('#') !== -1 ? "&" : "#"; // looks for hash in uri, not ampersand
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
};

如果有人对如何删除传递空值或 null 值的哈希参数有建议,我会洗耳恭听。

最佳答案

与其大力尝试重新发明轮子,我强烈建议您保持简单并使用库。看看URI.jsjsUrl .

关于javascript - JS 正则表达式 : modify updateQueryString function to handle hash and empty values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22123287/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com