function getQueryValue (key) {

const reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)', 'i')

const arr = window.location.search.substring(1).match(reg)

if (arr === null) return null

return decodeURIComponent(arr[2])

}

match()方法

match()方法用于在字符串内检索指定的值,该方法类似于indexOf()和lastIndexOf(),但是它返回指定的值,而不是字符串的位置

参数可以是所检索的字符串值,也可以是正则

该方法的返回值是存放匹配结果的数组,该数组的内容取决于正则是否具有全局标识g

说明

match()方法将检索调用该方法的字符串,以找到一个或多个与regexp匹配的文本。

如果regexp没有标识g,那么match()方法就只能执行一次匹配,如果没有找到任何匹配的文本,该方法返回null,否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息,该数组的第0个元素是正则所匹配到的文本,其余的元素存放的是正则表达式的子表达式匹配到的文本。除了这些常规元素之外,返回的数组还含有两个对象属相,index属性声明的是匹配文本的起始字符在string中的位置,input属性声明的是对string的引用。

如果regexp具有全局标识,则match()方法执行全局检索,找到string中的所有匹配子字符串,若没有找到任何匹配的子串,则返回null,如果找到一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组与前者大不相同,它的数组元素中存放的是string中所有的匹配子串,而且也没有index属性或input属性。

注意: 在全局检索模式下,match()既不提供与子表达式匹配的文本信息,也不声明每个匹配子串的位置,如果需要这些全局检索的信息,可以使用RegExp.exec()

substring()方法

该方法用于提取字符串中介于两个指定下标之间的字符

stringObject.substring(start,stop)

参数说明: start - 必需,一个非负整数,要提取子串的起始位置; stop - 可选,一个非负整数,如果省略该参数,则提取的子串一直到字符串的结尾。

说明: 如果start与stop相等,则返回一个空字符串;如果start比stop大,则该方法会先交换两个参数的位置,然后再执行提取操作。

substr()方法

该方法用于从字符串中抽取start下标开始的指定数目的字符

stringObject.substr(start,length)

参数说明: start - 必需,要抽取的子串的起始下标,必需是数值,如果是负数,则位置从尾部开始算起;length - 可选,子串中的字符数,必需是数值,如果省略,则一直抽取到结尾的字符串。

重要事项: ECMAscript中没有对该方法进行标准化,因此反对使用它

window.location.search

Location对象包含有关当前URL的信息

Location对象是Window对象的一个部分,可通过window.location属性来访问

search是Location对象的一个属性,可读可写,设置或返回从问好(?)开始的URL(查询部分)

location.search=path_from_questionmark

Location对象的其它属性

property description
hash 设置或返回从井号(#)开始的URL(锚)
host 设置或返回主机名和当前URL的端口号
hostname 设置或返回当前URL的主机名
href 设置或返回完整的URL
pathname 设置或返回当前URL的路径部分
port 设置或返回当前URL的端口号
protocol 设置或返回当前URL的协议

Location对象方法:

assign() 加载新的文档 location.assign(URL)

reload() 重新加载当前文档

说明: 如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来检测服务器上的文档是否已改变。如果文档已改变,reload() 会再次下载该文档。如果文档未改变,则该方法将从缓存中装载文档。这与用户单击浏览器的刷新按钮的效果是完全一样的;如果把该方法的参数设置为 true,那么无论文档的最后修改日期是什么,它都会绕过缓存,从服务器上重新下载该文档。这与用户在单击浏览器的刷新按钮时按住 Shift 健的效果是完全一样。

replace() 用新的文档替换当前的文档

说明: replace()方法不会再History对象中生成一个新的记录,当使用该方法时,新的URL将覆盖History对象中的当前记录。

encodeURIComponent()函数与encodeURI()函数

前者假定它的参数是URI的一部分(比如协议、主机名、路径或查询字符串),因此encodeURIComponent()函数将转义用于分割URI各个部分的标点符号。

总结: escape()除了ASCII字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL进行编码,最好不要使用此方法;encodeURI()方法用于编码整个URI,URI中的合法字符都不会被编码转换;encodeURIComponent()方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以将参数中的中文、特殊字符进行转义,而不会影整个URL。

正则两种写法的区别

var reg = /a/; // 一般情况下都使用简写的方式,性能较好

var reg = new RegExp('a'); // 需要传入参数的时候使用这种声明方式

JS获取URL参数的值的更多相关文章

  1. js 获取url参数的值

    //获取url参数函数function GetQueryString(name){    var reg = new RegExp("(^|&)"+ name +" ...

  2. get方法与post方法的区别与js获取url参数的方式

    1.get方法与post方法的区别: 区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据:区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于UR ...

  3. js获取url参数的方法

    js获取url参数的方法有很多. 1.正则分析 function getQueryString(name) { var reg = new RegExp("(^|&)" + ...

  4. .NET手记-JS获取Url参数

    最近为App做活动专区,其中很多活动都是采用html 5页面来制作的.一方面体量较小,制作快速,更新维护容易:另一方面,嵌入App后适配效果也不会很差. 这里我们采用混编形式来从native app传 ...

  5. js获取url参数,操作url参数

    function getParam(key) { var tmp = location.search; tmp = decodeURIComponent(tmp); var index = tmp.i ...

  6. jquery或js 获取url参数

    <script type="text/javascript"> function getUrlParam(name) { var reg = new RegExp(&q ...

  7. js获取url参数、图片转本地base64跨域问题

    获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...

  8. JS获取URL传的值与解决获取URL中的中文参数出现乱码

    大家好,我是小C, 我们在项目开发中有时需要页面与页面之间的传值,那我们可能会选择用地址栏传递参数,那另外的那个页面就需要获取地址栏里的参数,今天分享下关于地址栏怎么传递参数与获取中文参数出现乱码的解 ...

  9. 【2019】问题记录一:后端获取URL参数的值内加号“+”变成空格“ ”

    问题:URL参数中加号“+”变成空格“ ” 一.现象     URL如:http://example.****.com/controller/action?param=rice+cook+panda ...

随机推荐

  1. win10 uwp 活动磁贴

    本文翻译:https://mobileprogrammerblog.wordpress.com/2015/12/23/live-tiles-and-notifications-in-universal ...

  2. JavaScript正则表达式之分组匹配 / 反向引用

    语法 元字符:(pattern) 作用:用于反复匹配的分组 属性$1~$9 如果它(们)存在,用于得到对应分组中匹配到的子串 \1或$1 用于匹配第一个分组中的内容 \2或$2 用于匹配第一个分组中的 ...

  3. mysql主从复制的异步复制与同步复制

    异 步复制:MySQL本身支持单向的.异步的复制.异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机 ...

  4. 对于Swift的Enum,文档上没有说的

    今天无意发现一个东西, 但是在文档上看了很多遍都没找到, 但是亲测是可行的, 那到底是什么呢? 以前我们定义枚举 会这样: enum Hello { case Item( String, Int) c ...

  5. IntelliJ下断点不可用 No executable code found

    情景说明:ant工程+IntelliJ Idea 采取copy编译后的class文件到WEB-INF/classes目录下,断点一直不可用 如图: 网上查了很多资料都说的不够明确,IntelliJ社区 ...

  6. Java基础笔记13

    1.集合与对象数组的区别 集合与对象数组共同点:都是存放对象的容器: 区别在于:①集合是没有长度限制的:②集合容器中没有类型的限制. 2.集合(都在Java.util包下) 常用的集合:Collect ...

  7. 安装jdk时出现java -version权限不够问题

    今天在ubuntu上安装jdk的时候,最后测试java -version总是不行,出现了 bash: /home/jdk1.7.0_25/bin/java: 权限不够的问题 百度之后,在http:// ...

  8. Winsock网络编程笔记(2)----基于TCP的server和client

    今天抽空看了一些简单的东西,主要是对服务器server和客户端client的简单实现. 面向连接的server和client,其工作流程如下图所示: 服务器和客户端将按照这个流程就行开发..(个人觉得 ...

  9. Hibernate的基础入门(一)

    一Java三层结构 1 web层:struts框架 2 service层:Spring框架 3  dao层 :hibernate框架 相当于MVC的思想 1 M:模型èhibernate框架 2 V: ...

  10. MSSQL 备份数据库还原

    -- 完整还原RESTORE DATABASE XXXX FROM DISK = 'd:\XXXX.bak' WITH MOVE 'XXXX' TO 'D:\MSSQL\Data\XXXX.mdf', ...