获取方法

getUrlRequest: function (name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"), // 构造一个含有目标参数的正则表达式对象
        r = decodeURIComponent(window.location.search).substr(1).match(reg); // 匹配目标参数
    // 返回参数值
    if (r != null) {
        return decodeURIComponent(r[2]);
        // return unescape(r[2]);
    }
    return null;
}

字符串编码

  1. escape()
  • 已经废弃的编码函数 不建议再使用
    escape() 函数是全局对象的属性. 特色字符如: @*_+-./ 被排除在外.使用 unescape() 函数解码。

2.encodeURI(URI)

  • 一般用于编码整个URI 使用decodeURI()解码 需要注意下面的字符不会被编码|

    类型 包含
    保留字符 ; , / ? : @ & = + $
    非转义的字符 字母 数字 - _ . ! ~ * ' ( )
    数字符号 #
  • 注意 如果URL需要遵循较新的RFC3986标准,那么方括号是被保留的(给IPv6),因此对于那些没有被编码的URL部分(例如主机),可以使用下面的代码

      function fixedEncodeURI (str) {
           return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
       }
    
  1. encodeURIComponent()
  • 用于编码URI组成部分 使用 decodeURIComponent() 解码
    decodeURIComponent() 转义除了 字母 数字 ( ) . ! ~ * ' - _ 之外的所有字符

  • 对于 application/x-www-form-urlencoded (POST) 这种数据方式,空格需要被替换成 '+',所以通常使用 encodeURIComponent 的时候还会把 "%20" 替换为 "+"
    为了更严格的遵循 RFC 3986(它保留 !, ', (, ), 和 *),即使这些字符并没有正式划定 URI 的用途,下面这种方式是比较安全的:

      function fixedEncodeURIComponent (str) {
          return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
               return '%' + c.charCodeAt(0).toString(16);
          });
      }
    

正则分组

1.(^|&)" + name + "=([^&]*)(&|$)")

  • 匹配 name=xx &name=xx &name=xx&
  • [^abc] 取非 即不是abc的任意字符

match方法

  • 检索字符串 strObject 以找到一个或多个与正则匹配的文本
  • 如果正则没有gmatch() 方法只能执行一次匹配,如果没有找到任何匹配项返回 null
  • 如果匹配到了 则返回一个数组,数组第0个元素是匹配到的文本。其余的元素存放的是与正则表达式的子表达式配匹配的文本。即第1个元素是 (^|&) 第2个元素是 ([^&]*) 第三个元素是 (&|$)
  • 除了上面的元素还包含一个 index 项标识匹配文本的起始字符在 stringObject 的中的下标。 input 就是 stringObject
  • 以上是没有g的规则 当正则有gmatch()返回的是匹配的文本 不会返回正则子表达式的内容 且没有index input 元素。