これは以前に回答されており、そのために書かれたコンパクトなスクリプトがあります。
正規表現は、クエリ文字列値の抽出には最適ではありません。この回答の最後に、特定のフィールドの値を個別の参照に抽出できる式を示します。ただし、正規表現を使用して一度に 1 つずつパラメーターを抽出するのに「多くの」時間がかかるわけではありませんが、正規表現エンジンを必要とせずに、パラメーターをすべて非常に迅速に完全に抽出できます。たとえば、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();
の値を実行してから使用することで、現在の URL データを解析できます。query.key1
ptq()
関数を直接使用して、他のクエリ文字列形式のデータを解析できますquery_object = ptq(query_string)
。
別の言語を使用していて、正規表現を使用したい場合は、次のように、一致するすべての値が返さkey1
れます。
/key1=([^&;]*)/g
これにより、特定のフィールド名を持つすべての値が返されます (クエリ文字列の定義では、このように記述されますkey1=value1&key1=value2&key1=value3
)。
あなたの質問の仕方は、値をスペースで区切って、値を提供する独自のプログラマフレンドリーな方法 (つまり、ブラウザーを介してフォーム送信からデータを受け取るのではなく、独自のカスタム URL を構築すること) を作成したいように思えます。 (スペースは、HTTP GET クエリ文字列では + 記号としてエンコードされ、一般的なクエリ文字列では %20 としてエンコードされます)。
複雑な正規表現を作成してこれを 1 ステップで実行することもできますが、フィールド全体 (すべての値と + 記号も) に一致させてから、結果を + 記号で分割する方が高速です。
私が示した正規表現からの各結果について、単純に実行するだけでプラス記号で区切られた値を抽出できます/[^+]*/g