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

标签 javascript regex window.location

这个方便的函数添加和修改 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/

相关文章:

javascript - 在 jquery 中使用我的函数之外的变量

c++ - IBM i 上的正则表达式替换

javascript - 正则表达式匹配所有单数或双数数字

python - 正则表达式在缩写后添加逗号

javascript - 当前 URL hashchange 事件将新哈希附加到目标 URL 并链接到它

javascript - 如何从窗口位置路径找到参数键?

javascript - 我的 Javascript 代码无法正常工作

c# - 如何在所有浏览器中全屏显示网页,没有状态栏和地址栏?

javascript - js 如果 window.location.href 不匹配,则跳转到

javascript - 如何在javascript中转义#以检索对象属性