JS中用正则获取URL参数值的问题——JS中match函数的使用

来源:互联网 发布:中文语法分析常用算法 编辑:程序博客网 时间:2024/06/15 11:11

      在JS中获取URL中指定参数的值的方法有多种,但我觉得用正则表达式来获取要简洁方便的多。作为一只菜鸟猿,我在万能的网上找到了这样的代码:

var reg = new RegExp("(^|&)参数名称=([^&]*)(&|$)"); //正则表达式var r = window.location.search.substr(1).match(reg); //window.location.search.substr(1)截取URL中?后面的部分
      开心的把r当成匹配出的参数值结果去使用却不正确,原来r是一个数组。细看网上写的代码:

var reg = new RegExp("(^|&)参数名称=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);var 参数值 = unescape(r[2]);

        unescape函数很好理解,是对URL进行解码。那么为什么参数值是取r[2]呢?这就涉及到JS中match函数的用法了,查了W3school的文档,有这样一句话:如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。这就很好理解了,我们的match匹配返回的r中第0个元素是匹配的文本,后面的元素是正则子表达式匹配的文本。那么为什么参数匹配出来是第2个元素呢?用以下代码测试:

var reg = new RegExp("(^|&)paramname=([^&]*)(&|$)");var s="?paramname=paramValue";var paramValue = s.substr(1).match(reg);console.log(paramValue);
       浏览器中打印出的结果如下:

      

       可以看出,其实第1个元素对应的就是正则表达式里面第一个括号中的子表达式((^|&)paramname=([^&]*)(&|$))的匹配,第2个元素对应正则表达式中第二个括号中的子表达式((^|&)paramname=([^&]*)(&|$))的匹配,类推。所以,可见JS中match的第n位元素其实对应的是它匹配的正则表达式的第n个括号中的子表达式的匹配文本。
       以上,记录,完。


0 0
原创粉丝点击