0

クエリ文字列の一部からパラメーター値を取得するための正規表現が見つかりません:

パラメータ名をメソッドに送信し、 のような文字列の結果としてパラメータ値を取得する必要があります "p=1&qp=10"。私は次のことを思いつきました:

function getParamValue(name) {

  var regex_str = "[&]" + name + "=([^&]*)";

  var regex = new RegExp(regex_str);

  var results = regex.exec(my_query_string);
  // check if result found and return results[1]

}

の場合、私の regex_str が機能しなくなりましname = 'p'た。私がに変更regex_strする場合

var regex_str = name + "=([^&]*)";

'qp'paramの param の値を返すことができますname = 'p'

正規表現を使用して、文字列の最初または直後からパラメーター名の最初を検索するのを手伝ってもらえ'&'ますか?

4

3 に答える 3

1

パラメータ部分を分離したかどうかによっては、これが機能する場合があります。

var regex_str = "(?:^|\&)" + name + "=([^&]*)";
or
var regex_str = "(?:\&|\?)" + name + "=([^&]*)";
于 2012-05-10T16:06:40.780 に答える
1

正規表現文字列を次のように変更します。

//pass the query string and the name of the parameter's value you want to retrieve
function getParamValue(my_query_string , name)
{
    var regex_str = "(?:^|\&)" + name + "\=([^&]*)";
    var regex = new RegExp(regex_str);
    var results = regex.exec(my_query_string); 
    try
    {
        if(results[1] != '')
        {
            return results[1];
        }
    }
    catch(err){};
    return false;
}
于 2012-05-10T15:47:15.560 に答える
1

splitここでうまくいくように見えます:

var paramsMap = {};
var params = string.split("&");
for (var i = 0; i < params.length; ++i) {
    var keyValue = params[i].split("=", 2);
    paramsMap[keyValue[0]] = keyValue[1];
}

どうしても正規表現を使用したい場合は、gフラグとexecメソッドを使用する必要があります。の線に沿った何か

var regex = /([^=]+)=([^&]+)&?/g;
var paramsMap = {};
while (true) {
    var match = regex.exec(input);
    if (!match)
        break;
    paramsMap[match[1]] = match[2];
}

オブジェクトはステートフルになるため、別の抽出ループを実行する前にそのプロパティregexをリセットするか、新しいインスタンスを使用する必要があることに注意してください。lastIndexRegExp

于 2012-05-10T15:28:57.983 に答える