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]
    );
}

它返回空值。我什至做了一个用户脚本转到我刚刚给你的 url,我使用第一个函数来尝试获取那个 'imgurl' 参数,但它无法这样做。我也去掉了那个 url 中的冒号,但显然这什么也没做。

是什么让这个字符串格式的这个函数失效了?

4

1 回答 1

4

location.search是当前 URL 的查询字符串部分。如果您想用任意字符串变量替换它givenstring,那么您将替换location.searchgivenstring,而不是givenstring.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]
    );
}

(如果你的函数中有任何特殊字符——无论是 URL 中的特殊字符还是正则表达式中的特殊字符——你的函数也会出现异常行为name——但我猜你有足够的控制权name来确保这不会成为问题?)

于 2012-12-21T02:56:22.967 回答