Javascript解析字符串中的GET参数-这是什么意思?

Javascript解析字符串中的GET参数-这是什么意思?,javascript,query-string,Javascript,Query String,我一直在使用以下函数从当前url获取常规参数: function getURLParameter(name) { return decodeURI( (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] ); } 但是,我想从一个字符串中获取get参数'imgurl',该字符串将遵循url的格式 当我将该函数更改为处理常规字符串时: function getURLPar

我一直在使用以下函数从当前url获取常规参数:

function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}
但是,我想从一个字符串中获取get参数'imgurl',该字符串将遵循url的格式

当我将该函数更改为处理常规字符串时:

function getURLParameter(name, givenstring) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(givenstring.search)||[,null])[1]
    );
}
它返回null。我甚至让一个用户脚本转到我刚才给你的url,我使用第一个函数尝试获取“imgurl”参数,但它无法做到这一点。我还去掉了那个url中的冒号,但很明显,这并没有起到任何作用


关于这个字符串格式,是什么使这个函数失效的?

位置。search
是当前URL的查询字符串部分。如果要将其替换为任意字符串变量
givenstring
,则应将
location.search
替换为
givenstring
,而不是
givenstring.search
。因此:

function getURLParameter(name, givenstring) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(givenstring)||[,null])[1]
    );
}
顺便说一下,如果(例如)字符串是
foobar=baz&bar=bip
,并且感兴趣的参数是
bar
,那么函数将出现错误。它将找到
bar=…
的第一个实例,在本例中是
bar=baz
,而不是
bar=bip
。您可以使用
(^ |&)
来解决这个问题:


(如果
name
中包含任何特殊字符(URL中的特殊字符或正则表达式中的特殊字符),那么您的函数也会出现错误,但我猜您对
name
有足够的控制权,可以确保这不会成为问题?)

位置。搜索是当前URL的查询字符串部分。如果要将其替换为任意字符串变量
givenstring
,则应将
location.search
替换为
givenstring
,而不是
givenstring.search
。因此:

function getURLParameter(name, givenstring) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(givenstring)||[,null])[1]
    );
}
顺便说一下,如果(例如)字符串是
foobar=baz&bar=bip
,并且感兴趣的参数是
bar
,那么函数将出现错误。它将找到
bar=…
的第一个实例,在本例中是
bar=baz
,而不是
bar=bip
。您可以使用
(^ |&)
来解决这个问题:


(如果
name
中有任何特殊字符(URL中的特殊字符或正则表达式中的特殊字符),您的函数也会出现错误,但我猜您对
name
有足够的控制权,可以确保这不会成为问题?

工作得很好!我对Javascript正则表达式没有太多经验,所以我只是想。搜索与执行正则表达式有关。@MarkLyons:这是有道理的。有一个与正则表达式相关的
.search
——它是字符串的一个属性,请参阅——但实际上,这不是
location.search
所指的,因为
location
不是字符串。非常好用!我对Javascript正则表达式没有太多经验,所以我只是想。搜索与执行正则表达式有关。@MarkLyons:这是有道理的。有一个与正则表达式相关的
.search
——它是字符串的一个属性,请参阅——但实际上,这不是
location.search
所指的,因为
location
不是字符串。