【问题标题】:How do I get the value of a URL paramater in javascript?如何在 javascript 中获取 URL 参数的值?
【发布时间】:2011-08-30 13:00:56
【问题描述】:

我有一组 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(正则表达式)来获取参数g的值。

有人可以帮我解决这个问题吗?

【问题讨论】:

标签: javascript regex


【解决方案1】:
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

非常原始,但应该可以工作。

【讨论】:

  • 为什么是前导&?如果 g 是主要论点怎么办?我会用 [?&] 替换它
  • @CaNNaDaRk:确实,我显然已经半醒了。已修复,感谢提醒。
  • 别忘了提到 String.match 返回的是一个数组,而不是一个字符串。在这种情况下,它将是一个单元素数组;如果您在正则表达式的末尾添加“g”标志,您将在数组中获得多个结果(一个好的程序员应该为这种可能性做好准备)。
  • @CaNNaDaRk:鉴于这是一个哈希爆炸,我怀疑是否需要检查。我在这个例子中强调 primitive。
【解决方案2】:
var url = window.location.href;
getParameter("g=", url, "&");

function getParameter(parameter, buffer, delimiter)
{
   var start = buffer.indexOf(parameter);
   if (start == -1)
      return null;
   var data = buffer.slice(start);
   if(data.match(delimiter) != null)
      var end = data.indexOf(delimiter);
   else
      var end = data.length;
   data = data.slice(0, end);
   var eq = data.indexOf("=");
   data = data.slice(eq+1);
   return data;
}

【讨论】:

    【解决方案3】:
    var results = new Array;
    results = url.match(/[\?\&]g=([^&]*)/);
    

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

    【讨论】:

      【解决方案4】:

      试试这个:

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

      【讨论】:

        【解决方案5】:
        var str = 'http://domain.com/#!/dp/dp.php?g=4346&h=fd34&kl=45fgh&bl=nmkh';
        var reg = /(\&|\?)g=([^&]+)&?/;
        console.log(str.match(reg)[2]);
        

        【讨论】:

          【解决方案6】:

          使用此功能。

          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");
          

          免责声明:来自http://james.padolsey.com/javascript/bujs-1-getparameterbyname/的James Padolsey代码的无耻端口

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-31
            • 1970-01-01
            • 2012-02-29
            • 1970-01-01
            • 2011-09-09
            • 1970-01-01
            • 2020-10-07
            • 2020-09-18
            相关资源
            最近更新 更多