正则拆分url

直接po代码

function getQueryItems(url){
         var reg = /^(?:([A-Za-z]+):)?(?:\/{0,3})([A-Zaz.\-0-9]+)(?::(\d+))?(\/[^#?]*)?(?:\?([^#]*))?(?:#(.*))?$/;
        var result = url.match(reg); //result中存储分解下来的结果 
            console.log(result);
            var output = {}; //返回的结果
            var item =["scheme","host","port","path","queries","q","p","hash"]; //由于得到的键值对需要单独处理,所以先赋值前四项
            for(var i=1;i<5;i++){ 
                output[item[i-1]] = result[i];
            }
            console.log(output);
            //分解键值对
            var queries = result[5]; //queries存储得到的键值对
            var keyValues = queries.split("&"); //keyValues存储进一步分解结果 ["q=234", "p=abc"]
            var querySplit = {}; //存储得到的键和值对象 {q: "234", p:"abc"}
            for(var j=0;j<keyValues.length;j++){
            querySplit[keyValues[j].split("=")[0]] = keyValues[j].split("=")[1];
            }
            output["queries"] = querySplit;//将id加到对象中 
            output["hash"] = result[6];
             console.log(output);
        }
        getQueryItems("https://www.example.com:8080/a/b/c?q=234&p=abc#header");

这个输出会先输出整体的url,然后在输出分解后的。之所以会匹配两遍(先整体在分部),是因为括号的原因,与括号之间的?其实无关。

var reg2 = /[A-Za-z]+:\d+/;
var str = 'https:8080';
console.log(str.match(reg2));
//["https:8080", index: 0, input: "https:8080"]

var reg3 = /([A-Za-z]+)(?::(\d+))?/;
var str1 = 'https:8080';
console.log(str1.match(reg3));
//["https:8080", "https", "8080", index: 0, input: "https:8080"]

你可以自己一个一个把括号去掉试一下。

其他注释都写得很清楚啦,不懂得留言吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值