美文网首页
java和js提取url参数

java和js提取url参数

作者: 盼旺 | 来源:发表于2019-09-19 16:32 被阅读0次

    java代码

    package wg;
    import java.util.HashMap;
    import java.util.Map;
    
    public class UrlUtil {
        public UrlEntity urlEntity;
        public class UrlEntity{
            //url字符串
            public String baseUrl;
            //url参数集合
            public Map<String, String> params;
        }
        public UrlEntity parse(String url){
            UrlEntity entity = new UrlEntity();
            url = url.trim();//去除前后空格
            if (url.equals("")||url == null) {
                return entity;
            }
            //split() 方法根据匹配给定的正则表达式来拆分字符串。
            //返回字符串数组。
            //注意: . 、 | 和 * 等转义字符,必须得加 \\。
            String[] urlParts = url.split("\\?");
            entity.baseUrl = urlParts[0];
            //没有参数
            if (urlParts.length == 1) {
                return entity;
            }
            //有参数
            String[] params = urlParts[1].split("&");
            entity.params = new HashMap<>();
            for (String param : params) {
                String[] keyValue = param.split("=");
                entity.params.put(keyValue[0], keyValue[1]);
            }
            return entity;
        }
    
        public static void main(String[] args) {
            UrlUtil urlUtil = new UrlUtil();
            urlUtil.urlEntity = urlUtil.parse("http://www.123.com?id=1&name=小明");
            for(String s : urlUtil.urlEntity.params.keySet()){
                System.out.println(s+"="+urlUtil.urlEntity.params.get(s));
                //name=小明
                //id=1
            }
        }
    }
    

    js代码

    function GetUrlString(url) {
        // 用JS拿到URL,如果函数接收了URL,那就用函数的参数。如果没传参,就使用当前页面的URL
        var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
        // 用来存储我们所有的参数
        var obj = {};
        // 如果没有传参,返回一个空对象
        if (!queryString) {
            return obj;
        }
        //如果后面的字符串存在#,我们还得将#后面的字符串去掉,因为#后面的内容并不是我们需要获取的参数,而是网页位置的标识符
        queryString = queryString.split('#')[0];
        // 将参数分成数组
        var arr = queryString.split('&');
        for (let i = 0; i < arr.length; i++) {
    
    
            // 分离成key:value的形式
            let a = arr[i].split('=');
            // 为每一个变量key分配对应的值value,如果我们得到的value不是一个正确的参数,我们就用true来表示这个参数名存在
            let paramName = a[0];
            let paramValue = typeof(a[1]) === 'undefined' ? true : a[1];
            // 如果调用对象时要求大小写区分,可删除这两行代码
            paramName = paramName.toLowerCase();
            if (typeof(paramValue) === 'string')
                paramValue = paramValue.toLowerCase();
            // 如果paramName以方括号结束, 如 colors[] or colors[2]
            //http://www.123.com/?colors[0]=red&colors[2]=green&colors[6]=blue
            if (paramName.match(/\[(\d+?\])$/)) { //满足条件 加上问好表示满足colors[2]和colors[]里面可以什么都没有
                // 如果paramName不存在,则创建key 第一次遇到
                var key = paramName.replace(/\[(\d+?\])$/, ''); //把 colors[2] 变成colors
                if (!obj[key]) {
                    obj[key] = []; //定义成一个数组
                }
                // 如果是索引数组 如 colors[2] 获取索引值并在对应的位置添加值
                if (paramName.match(/\[(\d+\])$/)) { //表示里面有数字 不是空
                    var index = /\[(\d+)\]/.exec(paramName)[1]; //exec匹配成功返回数组,否则null 注意[0]里面使匹配的全部字符串 所以单个的从1开始
                    obj[key][index] = paramValue;
                } else {
                    // 如果是其它的类型,也放到数组中
                    obj[key].push(paramValue);
                }
            } else { // 处理字符串类型
                if (!obj[paramName]) {
                    // 如果如果paramName不存在,则创建对象的属性
                    obj[paramName] = paramValue;
                } else if (obj[paramName] && typeof obj[paramName] === 'string') {
                    // 如果属性存在,并且是个字符串,那么就转换为数组
                    obj[paramName] = [obj[paramName]];
                    obj[paramName].push(paramValue);
                } else {
                    // 如果是其它的类型,还是往数组里丢
                    obj[paramName].push(paramValue);
                }
            }
    
        }
        return obj;
    }
    console.log(GetUrlString("http://www.123.com/?colors[0]=red&colors[2]=green&colors[6]=blue"));
    //{ colors: [ 'red', <1 empty item>, 'green', <3 empty items>, 'blue' ] }
    console.log(GetUrlString("http://www.123.com/?Id=123&username=xingxing"));
    // { id: '123', username: 'xingxing' }
    

    参考文章:https://juejin.im/post/5cef5f99e51d45778f076cb8

    相关文章

      网友评论

          本文标题:java和js提取url参数

          本文链接:https://www.haomeiwen.com/subject/djsructx.html