查询字符串解析需用正则 /(1+)(?:=(2*))?/g 提取键值对,匹配后调用 decodeuricomponent 解码,并处理空值、重复键、+号空格及编码等号等边界情况。&= ↩& ↩

查询字符串(Query String)是 URL 中问号 ? 后面的部分,通常由键值对组成,用 & 分隔,键和值之间用 = 连接。正则表达式可以高效提取其中的参数,但需注意编码、空值、重复键等边界情况。
基础匹配:提取所有 name=value 对
最简场景下,每个参数形如 key=value,且 value 不含特殊字符或未编码。可用以下正则提取:
/([^&=]+)=([^&]*)/g
-
([^&=]+)匹配键:一个或多个非&和非=的字符 -
=字面量等号 -
([^&]*)匹配值:零个或多个非&字符(允许空值) -
g标志确保全局匹配所有参数
处理 URL 编码:解码后再解析更可靠
实际查询字符串中,空格、中文、符号常被编码(如 %20、%E4%B8%AD)。正则本身不负责解码,但应在匹配后对捕获组调用 decodeURIComponent():
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
示例(JavaScript):
const qs = "name=%E4%B8%AD%E6%96%87&age=25&city=";
const regex = /([^&=]+)=([^&]*)/g;
const params = {};
let match;
while ((match = regex.exec(qs)) !== null) {
const key = decodeURIComponent(match[1]);
const value = decodeURIComponent(match[2]);
params[key] = value;
}
// { name: "中文", age: "25", city: "" }
支持可选值与重复键:增强健壮性
有些参数可能无值(如 ?debug&flag=on),或同一键出现多次(如 ?tag=a&tag=b)。基础正则无法区分空值与缺失值,建议扩展为:
/([^&=]+)(?:=([^&]*))?/g
-
(?:=([^&]*))?表示“等号加值”是可选的,值组可能为undefined - 遇到
debug这类无=的参数时,match[2]为undefined,可统一设为""或"true" - 对重复键,可用数组收集值:
params[key] = params[key] ? [].concat(params[key], value) : value
避免常见陷阱:不要忽略边界和转义
直接用正则解析查询字符串易出错,需警惕:
- 未处理
+表示空格(传统编码格式),需先将+替换为%20再解码 - 正则无法识别嵌套结构或复杂分隔符,如
value=hello%20world&next=foo%3Dbar中的%3D是编码后的=,不能误判为新参数起始 - 若查询字符串来自不可信输入,应限制匹配长度或使用专门的解析库(如
URLSearchParams)更安全










