之前已经回答了这个问题,并且为此编写了紧凑的脚本。
正则表达式不是提取查询字符串值的最佳选择。在这个答案的最后,我会给你一个表达式,它可以将给定字段的值提取到单独的引用中。但这并不是说使用正则表达式一次提取一个参数需要“很多”时间,而是它们都可以非常快速地完全提取出来,而无需正则表达式引擎。例如,http://www.htmlgoodies.com/beyond/javascript/article.php/3755006/How-to-Use-a-JavaScript-Query-String-Parser.htm
您尝试使用什么语言来提取这些参数,C++?
如果你使用的是JavaScript,你使用上面文章中提到的小功能,即,
function ptq(q)
{
/* parse the query */
var x = q.replace(/;/g, '&').split('&'), i, name, t;
/* q changes from string version of query to object */
for (q={}, i=0; i<x.length; i++)
{
t = x[i].split('=', 2);
name = unescape(t[0]);
if (!q[name])
q[name] = [];
if (t.length > 1)
{
q[name][q[name].length] = unescape(t[1]);
}
/* next two lines are nonstandard, allowing programmer-friendly Boolean parameters */
else
q[name][q[name].length] = true;
}
return q;
}
function param() {
return ptq(location.search.substring(1).replace(/+/g, ' '));
}
query = param();
一旦您将该代码包含在您的页面脚本中,您就可以通过执行然后使用的值query.key1
等来解析当前的 URL 数据。
您可以直接使用该ptq()
函数解析其他查询字符串格式的数据,即query_object = ptq(query_string)
.
如果您使用另一种语言并且正则表达式是您想要的方式,那么这将返回所有匹配的值key1
,例如:
/key1=([^&;]*)/g
这将返回具有特定字段名称的所有值(在查询字符串定义中,这样写key1=value1&key1=value2&key1=value3
,等等)。
您提出问题的方式听起来像是您想要创建自己的程序员友好的提供值的方式(即,通过构建自己的自定义 URL,而不是通过浏览器从表单提交中接收数据),其中您的值由空格分隔(空格在 HTTP GET 查询字符串中编码为 + 符号,在通用查询字符串中编码为 %20)。
您可以制作一个复杂的正则表达式来一步完成,但匹配整个字段(所有值和 + 符号也是如此)会更快,然后在 + 符号处拆分结果。
对于我指出的正则表达式的每个结果,您可以通过简单地提取加号分隔值/[^+]*/g