java和js提取url参数

2019-09-19  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读