You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:02:52