有这么一段字符串:
http://192.168.40.224/htmlargu/demo.html?log_id=111&cat_id=222&page=333上面是通过:
var LocString=String(window.document.location.href);
获取的。然后我想构造一个函数,
function GetQueryString(str){
}当传入关键字如“cat_id”的时候,能够返回它的值,如:
var cat_id = GetQueryString("cat_id")
这样就得到了cat_id = 222;函数里面,我看别人的是:
function GetQueryString(str){
                var rs=new RegExp("(^|)" +str+ "=([^\&]*)(\&|$)","gi").exec(LocString),tmp;
                if(tmp=rs)return
                        tmp[2];
                return "没有这个参数";
        }但运行结果是错误的,是别人写的正则表达式错了? 正确的正则表达式如何写啊,new RegExp的这一句是什么意思啊?太复杂了。。正则表达式JavaScript

解决方案 »

  1.   

    var rs=new RegExp("(^|)" +str+ "=([^\&]*)(\&|$)","gi").exec(LocString);
                    return rs[2];又试了一下,改成这样,就行了。。那个正则表达式应该如何解读啊?
      

  2.   

    function getQueryString(key) {
    var regex_str = "^.+\\?.*?\\b"+ key +"=(.*?)(?:(?=&)|$|#)"
    var regex = new RegExp(regex_str,"i");
    var url = window.location.toString();
    if(regex.test(url)) return RegExp.$1;
    return null;
    }alert( getQueryString('cat_id') );
      

  3.   

    RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具
    http://http://www.w3school.com.cn/js/jsref_obj_regexp.asp
    $(function () {
                var str = "cat_id";
                var LocString = "http://192.168.40.224/htmlargu/demo.html?log_id=111&cat_id=222&page=333";
                var rs = new RegExp("(^|)" + str + "=([^\&]*)(\&|$)", "gi").exec(LocString),tmp;
                if (tmp = rs)
                    alert(tmp[2]);
            });
    貌似木有问题啊 alert是222
      

  4.   


    var LocString = "http://192.168.40.224/htmlargu/demo.html?log_id=111&cat_id=222&page=333";   
    var qso = {};
    LocString.replace(/([^\?\&]+)=([^\&]*)/ig,function(a,b,c){qso[b]=c});
    alert(qso.log_id);
    alert(qso.cat_id);
    alert(qso.page);
      

  5.   

    function GetQueryString(name) {
            var reg = new RegExp("[&?]"+ name + "=([^&#]*)","ig");
            var res = [];
            location.search.replace(reg, function($, $1) {
                res.push(decodeURIComponent($1));
            });
            return res;//考虑到有可能是多个值,返回数组
        }