正则表达式获取 URL 中的所有参数和值

8 篇文章 0 订阅
1 篇文章 0 订阅

解析 URL 参数是一个常用的场景,一般有 2 种处理方式:① 正则获取;② split 自行处理;
本文写了 2 个常用的场景示例:① 获取所有参数;② 获取单个参数;

一. 获取所有参数的 <key, value> 对象

1. 正则方式
/**
* 获取当前 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,下面的方法可以
2. 正则 + split 方式
/**
* 获取当前 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;
}

二. 获取单个 key 的参数

1. 正则方式
/**
* 获取当前 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;
}
  • (\\?|&)意思是字符串中以?或&开始的地方
  • ([^&]*)意思是非&的字符串
  • (&|$)意思是以&或$结尾的字符串
2. split 方式
/**
* 获取当前 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;
}
### 回答1: 您好,第一个问题属于技术问题,可以回答。您可以使用以下代码获取url参数: ```python import re url = "https://www.example.com?param1=value1&param2=value2&param3=value3" params = re.findall(r'\?(\S+)', url)[0].split('&') for param in params: key, value = param.split('=') print(f"{key}: {value}") ``` 以上代码使用正则表达式和字符串分割的方式获取url参数,并将其打印出来。您可以根据您的具体需求进行修改。希望能够帮到您! ### 回答2: 使用正则表达式获取URL参数可以通过以下步骤实现: 1. 定义一个正则表达式模式来匹配URL参数。例如,可以使用类似于`(\w+)=(\w+)`的模式来匹配参数名和参数。 2. 使用编程语言正则表达式函数来查找URL匹配正则表达式模式的部分。例如,在Python,可以使用`re.findall()`函数来匹配所有符合模式的参数对。 3. 遍历匹配的参数对列表,并提取参数名和参数。例如,在Python,可以使用分组功能`(\w+)`和`(\w+)`来提取参数名和参数。 4. 将提取的参数名和参数存储在合适的数据结构,以便后续使用。例如,可以使用字典来存储参数名和参数的键对。 以下是一个简单的Python示例: ```python import re def get_url_parameters(url): pattern = r"(\w+)=(\w+)" matches = re.findall(pattern, url) parameters = {} for match in matches: parameter_name = match[0] parameter_value = match[1] parameters[parameter_name] = parameter_value return parameters url = "https://www.example.com/?name=Alice&age=25&gender=female" parameters = get_url_parameters(url) print(parameters) ``` 运行上述代码,输出将是一个包含参数名和参数的字典: `{'name': 'Alice', 'age': '25', 'gender': 'female'}` ### 回答3: 使用正则表达式获取URL参数可以通过分析URL的结构,截取参数部分,并使用正则表达式模式进行匹配操作。以下是一个示例代码: ```python import re def extract_params_from_url(url): pattern = r"[?&](\w+)=([^&]+)" matches = re.findall(pattern, url) params = {} for match in matches: key = match[0] value = match[1] params[key] = value return params # 示例URL url = "https://www.example.com/page?username=johndoe&id=12345" params = extract_params_from_url(url) print(params) ``` 上述代码的`extract_params_from_url`函数使用正则表达式模式`[?&](\w+)=([^&]+)`,该模式匹配参数名和参数,并且将它们存储在字典。最后调用该函数,并传入示例URL,即可获取URL参数。 输出结果为:`{'username': 'johndoe', 'id': '12345'}`。 需要注意的是,上述代码正则表达式模式仅适用于常见的URL格式,如果URL参数部分具有其他特殊结构,可能需要根据实际情况调整正则表达式的模式。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值