如何仅提取URL的参数名称(不含参数值)?
提取URL中的参数名称(不含参数值)
嘿,这个需求其实挺常见的,刚好有几个靠谱的方案,分场景给你说说:
1. 浏览器端/现代JS:用原生URLSearchParams API(推荐)
这是最稳妥的方式,浏览器原生支持,能处理各种边缘情况(比如参数名带特殊字符、参数没有值等):
// 示例URL const url = 'www.mydomain.com/filtres?makes=honda,mazda,jeep&models=crv,cx5,wamgler&years=2008'; // 提取查询字符串部分(?后面的内容) const queryString = url.split('?')[1] || ''; // 用URLSearchParams解析 const params = new URLSearchParams(queryString); // 获取所有参数名并转为数组 const paramNames = Array.from(params.keys()); console.log(paramNames); // 输出: ["makes", "models", "years"]
如果你的URL是完整带协议的(比如https://www.mydomain.com/...),还可以直接用URL对象一步到位:
const fullUrl = 'https://www.mydomain.com/filtres?makes=honda,mazda,jeep&models=crv,cx5,wamgler'; const parsedUrl = new URL(fullUrl); const paramNames = Array.from(parsedUrl.searchParams.keys()); console.log(paramNames); // 输出: ["makes", "models"]
2. Node.js环境:用内置url模块
Node里可以用官方的url模块来解析,和浏览器端逻辑类似:
const { URL } = require('url'); const url = 'www.mydomain.com/filtres?makes=honda,mazda,jeep&models=crv,cx5,wamgler&years=2008,2010&city=vancouver'; // 注意:Node的URL需要完整的协议,所以补个http:// const parsedUrl = new URL(`http://${url}`); const paramNames = Array.from(parsedUrl.searchParams.keys()); console.log(paramNames); // 输出: ["makes", "models", "years", "city"]
3. 正则表达式方案(适合简单场景)
如果不想用API,也可以用正则直接提取,适合参数格式比较规范的情况:
const url = 'www.mydomain.com/filtres?makes=honda,mazda,jeep&models=crv,cx5,wamgler'; // 正则匹配?或&后面的参数名(直到=或&为止) const paramNames = url.match(/(?<=\?|&)[^=&]+/g) || []; console.log(paramNames); // 输出: ["makes", "models"]
解释下正则:
(?<=\?|&):正向预查,确保匹配的内容前面是?或者&[^=&]+:匹配所有不是=和&的字符,也就是参数名|| []:处理URL没有参数的情况,避免返回null
边缘情况测试
不管哪种方案,都能处理这些情况:
- URL没有参数:返回空数组
[] - 参数名后无值(比如
?makes&models=crv):提取["makes", "models"] - 参数名带特殊字符(比如
?my-param=123&user.name=john):都能正确提取
内容的提问来源于stack exchange,提问作者Behseini
相关产品推荐
相关产品推荐

