解析 URL 参数是一个常用的场景,一般有 2 种处理方式:① 正则获取;② split 自行处理;
本文写了 2 个常用的场景示例:① 获取所有参数;② 获取单个参数;
* 获取当前 URL 所有 GET 查询参数
* 入参:要解析的 URL,不传则默认为当前 URL
* 返回:一个<key, value>参数对象
function
getUrlQueryParams
(
url
=
location
.
search
)
{
const
params
=
{
}
;
const
keys
=
url
.
match
(
/([^?&]+)(?==)/g
)
;
const
values
=
url
.
match
(
/(?<==)([^&]*)/g
)
;
for
(
const
index
in
keys
)
{
params
[
keys
[
index
]
]
=
values
[
index
]
;
return
params
;
-
([^?&]+)
意思是匹配非
? 及 &
开头的非空字符串
-
(?==)
意思是非获取匹配
=
,正向肯定预查,以便获取不带等号结尾的 key 值
-
([^&]*)
意思是匹配非
? 及 &
结尾的字符串(包含空字符串情况,因为有的 value 值会为空)
-
(?<==)
意思是非获取匹配
=
,反向肯定预查,以便获取不带等号开头的 value 值
-
注意:
IOS SyntaxError: Invalid regular expression: invalid group specifier name
在 iOS 上会不支持常用零宽断言
?<=、?<!、?!、?=
因此上面的函数不适用 iOS,下面的方法可以
* 获取当前 URL 所有 GET 查询参数
* 入参:要解析的 URL,不传则默认为当前 URL
* 返回:一个<key, value>参数对象
function
getUrlQueryParams
(
url
=
location
.
search
)
{
const
params
=
{
}
;
const
reg
=
/([^&?]*)=([^&]*)/g
;
const
res
=
url
.
match
(
reg
)
;
for
(
const
key
in
res
)
{
const
query
=
res
[
key
]
.
split
(
'='
)
;
params
[
query
[
0
]
]
=
query
[
1
]
;
return
params
;
* 获取当前 URL 单个 GET 查询参数
* 入参:要解析的 URL,不传则默认为当前 URL
* 返回:一个<key, value>参数对象
function
getUrlSingleParam
(
key
,
url
=
location
.
search
)
{
const
reg
=
new
RegExp
(
"(\\?|&)"
+
key
+
"=([^&]*)(&|$)"
)
;
const
r
=
url
.
match
(
reg
)
;
if
(
r
!=
null
)
{
return
unescape
(
r
[
2
]
)
;
return
null
;
-
(\\?|&)
意思是字符串中以
?或&
开始的地方
-
([^&]*)
意思是非
&
的字符串
-
(&|$)
意思是以
&或$
结尾的字符串
* 获取当前 URL 单个 GET 查询参数
* 入参:要解析的 URL,不传则默认为当前 URL
* 返回:一个<key, value>参数对象
function
getUrlSingleParam
(
key
,
url
=
location
.
search
)
{
var
query
=
url
.
substring
(
1
)
;
var
vars
=
query
.
split
(
"&"
)
;
for
(
var
i
=
0
;
i
<
vars
.
length
;
i
++
)
{
var
pair
=
vars
[
i
]
.
split
(
"="
)
;
if
(
pair
[
0
]
==
key
)
{
return
pair
[
1
]
;
}
return
null
;
/*通过正则
获取
url
中
的
参数
*/
function get
Url
Param(name){
var reg = new RegExp((^|&)+ name +=([^&]*)(&|$));
var r = [removed].search.substr(1).match(reg);
if(r!=null)return decodeURI(r[2]); return null;
以上这篇通过正则
package com.Qi.cn;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test {/*** 现有字符串
String
:"a.do?pageIndex=1&ac=6&pageIndex=123&pageIndex1=1&pageindex=123&...
1.代码如下所示:
// An highlighted block
let
url
= 'https:www.baidu.com:5500?name=erYa&age=18#index';
function
query
Url
Params(){
let first
url
=this.split('?')[1];
let two
url
=first
url
.split('');
//
URL
参数
取得
function get
Query
String
(name) {
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r
function get
Url
Params(name) {
var reg = new RegExp("(^|&)" + name + “=([^&]*)(&|$)”, “i”); //定义
正则表达式
var r = window.location.search.substr(1).match(reg);
if (r != null) re...
export default{
get
Url
Key:function(name){
return decodeURIComponent((new RegExp('[?|&]'+name+'='+'([^&;]+?)(&|#|;|$)').exec(location.href)||[,""])[1].replace(/\+/g,'%20'))||null;
2、在main.js里引入js文件
3、在需.
最前面是?或&,紧跟着除 ?&#以外的字符若干,然后是等号,最后再跟着除 ?&#以外的字符,并且要分组捕获到【除?&#以外的字符】
写出来的正则就是这样: var reg=/[?&]([^?&#]+)=([^?&#]+)/g;
用正则的exec来处理,同时用到while循环,因为我们不确定
参数
到底有多少对
可以看到在.
前言:相信大家对
获取
浏览器
参数
都很熟悉,第一反应是使用
正则表达式
去对浏览器的
参数
进行切割
获取
,然而浏览器已经提供了一个
URL
SearchParams这个接口给我们去操作
URL
的查询字符串
使用
正则表达式
获取
url
温故而知新,先上一下我们常规使用
正则表达式
去
获取
url
参数
的代码
function getParams(
url
, params){
var res = new RegExp("(?:&|/?)" + params + "=([^&$]+)").exec(
url
);
正则表达式
获取
url
传参讲解
示例
url
:
http://localhost:8080/devicebd.html?location=30220000092&theId=2710-20200700055
function get
Query
String
(name) {//查找
url
中
传递的
参数
信息
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = wind