如何在javascript中获取URL参数的值?

如何在javascript中获取URL参数的值?,javascript,regex,Javascript,Regex,我有一组URL,我想从中提取某个参数的值 例如: http://example.com/#!/dp/dp.php?g=4346&h=fd34&kl=45fgh&bl=nmkh http://example.com/#!/dp/dp.php?h=fd34&g=4346&kl=45fgh&bl=nmkh http://example.com/#!/dp/dp.php?h=fd34&kl=45fgh&g=4346&bl=nmkh http://example.com/#!/dp/dp.php?h=fd

我有一组URL,我想从中提取某个参数的值

例如:

http://example.com/#!/dp/dp.php?g=4346&h=fd34&kl=45fgh&bl=nmkh
http://example.com/#!/dp/dp.php?h=fd34&g=4346&kl=45fgh&bl=nmkh
http://example.com/#!/dp/dp.php?h=fd34&kl=45fgh&g=4346&bl=nmkh
http://example.com/#!/dp/dp.php?h=fd34&kl=45fgh&bl=nmkh&g=4346
我想使用javascript(regex)获取参数
g
的值

有人能帮我吗

var gMatches = url.match(/[?&]g=[^&]*/);
var g = gMatches[1];
细分:

[?&]         # starts with a ? or &
g=           # contains g and an equals
[^&]*        # contains any character (except &) 0+ times
非常原始,但应该有效

细分:

[?&]         # starts with a ? or &
g=           # contains g and an equals
[^&]*        # contains any character (except &) 0+ times
非常原始,但应该可以工作。

使用此功能

function getParameterByName(name) {

    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.search);

    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));

}
就像

var url = "http://domain.com/#!/dp/dp.php?g=4346&h=fd34&kl=45fgh&bl=nmkh";
var parm =  getParameterByName("g");
免责声明:来自的James Padolsey代码的无耻端口使用此功能

function getParameterByName(name) {

    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.search);

    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));

}
就像

var url = "http://domain.com/#!/dp/dp.php?g=4346&h=fd34&kl=45fgh&bl=nmkh";
var parm =  getParameterByName("g");
免责声明:詹姆斯·帕多尔西的无耻之港

var url = window.location.href;
var name = 'g';
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var results = new RegExp("[\\?&]" + name + "=([^&#]*)").exec(url);
if (results != null)
{
    var g_url_value = results[1];
}
试试这个:

var url = window.location.href;
var name = 'g';
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var results = new RegExp("[\\?&]" + name + "=([^&#]*)").exec(url);
if (results != null)
{
    var g_url_value = results[1];
}
这应该只包含g的第一个值,而不是整个“g=blah”字符串


这应该只包含g的第一个值,而不是整个“g=blah”字符串。

为什么要使用前导符号和?如果g是主要论点呢?我会用[?&]@CaNNaDaRk来代替它:事实上,我显然已经半睡半醒了。修正了,谢谢提醒。别忘了提到那个字符串。match返回一个数组,而不是字符串。在这种情况下,它将是一个单元素数组;如果你在正则表达式的末尾加上“g”标志,你将在数组中得到多个结果(一个好的程序员应该为这种可能性做好准备)。@CaNNaDaRk:考虑到这是一个散列爆炸,我怀疑是否需要进行检查。在这个例子中,我强调的是原语,为什么前面的符号是和?如果g是主要论点呢?我会用[?&]@CaNNaDaRk来代替它:事实上,我显然已经半睡半醒了。修正了,谢谢提醒。别忘了提到那个字符串。match返回一个数组,而不是字符串。在这种情况下,它将是一个单元素数组;如果你在正则表达式的末尾加上“g”标志,你将在数组中得到多个结果(一个好的程序员应该为这种可能性做好准备)。@CaNNaDaRk:考虑到这是一个散列爆炸,我怀疑是否需要进行检查。在这个例子中,我强调的是原语。看,或者。看,或者。