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

      在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值