随笔 - 80  文章 - 0  评论 - 32  阅读 - 88285

用javascript替换URL中的参数值

最近在网上看到的JS替换URL的值,基本都是

function changeUrlArg(url, arg, arg_val){
    var pattern = arg+'=([^&]*)';
    var replaceText = arg+'='+arg_val;
    return url.match(pattern) ? url.replace(eval('/('+ arg+'=)([^&]*)/gi'), replaceText) : (url.match('[\?]') ? url+'&'+replaceText : url+'?'+replaceText);
}

但是这个是有问题的,例如:url为:http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1,arg为id,arg_val为5,

通过替换的到:http://www.lllllllllll.com/test.testhtml?typeId=5&id=5&user_id=5,很面试这3个值都变了,因为替换值的时候是以“id=([^&]*)”为主的,还有正则是排除了大小写的,所以说新的值会替换所有的符合条件的。

然后我们实际想要的是:http://www.lllllllllll.com/test.testhtml?typeId=3&id=5&user_id=1,

进行实际操作,下面代码可自行优化:

复制代码
<script>
/* 
* 替换URL的参数值
* url 目标url
* arg 需要替换的参数名称 
* arg_val 替换后的参数的值 
* return url 参数替换后的url 
*/
function changeURLArg(url, arg, arg_val) {
    var pattern = arg + '=([^&]*)';
    var replaceText = arg + '=' + arg_val;
    if (url.match(pattern)) {
        var retuenUrl = url;
        var temp = '/(\&' + arg + '=)([^&]*)/gi';
        if (eval(temp).test(retuenUrl)) {
        retuenUrl = retuenUrl.replace(eval(temp), '&' + replaceText);
        }
        var temps = '/([\?])(' + arg + '=)([^&]*)/gi';
        if (eval(temps).test(retuenUrl)) {
        retuenUrl = retuenUrl.replace(eval(temps), '?' + replaceText);
        }
        return retuenUrl;
    }
    else {
        // if (url.match('[\?]')) {
        if (url.indexOf('?') > 0) {
            return url + "&" + replaceText;
        } else {
            return url + "?" + replaceText;
        }
    }
    return url + '\n' + arg + '\n' + arg_val;
}
document.write(changeUrlArg('http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1', 'id', 5));
</script>
复制代码

通过上述,得达到我们想要的结果,不懂的可以留言或者代码能优化的,可以留言,共同进步,嘿嘿嘿

 

posted on   小乐丶  阅读(2207)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示