0

次の関数を使用して、現在の URL から通常のパラメーターを取得しています。

function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

ただし、ここの URL の形式に従う文字列から GET パラメータ 'imgurl' を取得したいと考えています。

その関数を通常の文字列を処理するように変更すると、次のようになります。

function getURLParameter(name, givenstring) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(givenstring.search)||[,null])[1]
    );
}

null を返します。ユーザースクリプトを先ほど提供した URL に移動させ、最初の関数を使用してその「imgurl」パラメーターを取得しようとしましたが、取得できませんでした。その URL のコロンも削除しましたが、明らかに何もしませんでした。

この文字列形式について、この機能を無効にしているのは何ですか?

4

1 に答える 1

4

location.search現在の URL のクエリ文字列部分です。それを任意の文字列変数に置き換えたい場合は、ではなくgivenstring置き換えます。そう:location.searchgivenstringgivenstring.search

function getURLParameter(name, givenstring) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(givenstring)||[,null])[1]
    );
}

ちなみに、(たとえば) 文字列がfoobar=baz&bar=bipで、対象のパラメーターが である場合、関数は誤動作しますbar。の最初のインスタンスを見つけます。bar=...この場合はbar=bazではなく ですbar=bip。次を使用して修正できます(^|&)

function getURLParameter(name, givenstring) {
    return decodeURI(
        (RegExp('(^|&)' + name + '=(.+?)(&|$)').exec(givenstring)||[,,null])[2]
    );
}

name( URL の特殊文字または正規表現の特殊文字のいずれかの特殊文字が含まれている場合も、関数は誤動作しますnameが、それが問題にならないことを確認できるように十分に制御できると思いますか?)

于 2012-12-21T02:56:22.967 に答える