从 url 查询字符串中获取特定值

Posted

技术标签:

【中文标题】从 url 查询字符串中获取特定值【英文标题】:Getting specific value from url query string 【发布时间】:2012-04-24 23:37:19 【问题描述】:

我有以下 URL,我想使用 javascript 从中获取“id”值。

https://www.blabla.com/ebookedit?id=B0077RQGX4&commit=Go

我从这段代码开始:

var url = document.URL;
var id_check = /^\id...\E; // NOT SURE HERE
var final_id = new RegExp(id_check,url);

我想提取 id "B0077RQGX4" 并将其保存到我稍后会修改的变量中。我该怎么做?我会在 JavaScript 中使用哪些函数

【问题讨论】:

【参考方案1】:

下面的工作非常好,比我找到的大多数解决方案更容易理解。

<script>
//Pulls the variables from a URL and saves them
function $_GET(q,s) 
    s = (s) ? s : window.location.search;
    var re = new RegExp('&'+q+'=([^&]*)','i');
    return (s=s.replace(/^\?/,'&').match(re)) ?s=s[1] :s='';


//Get the variables value
var urlvariablevalue = $_GET('id');

//Display the Value of the id from the URL
document.write(urlvariablevalue);
</script>

【讨论】:

【参考方案2】:

我想出了这个:

var final_id;
var url = document.URL;
var id_check = /[?&]id=([^&]+)/i;
var match = id_check.exec(url);
if (match != null) 
    final_id = match[1];
 else 
    final_id = "";

适用于:

https://www.blabla.com/ebookedit?id=B0077RQGX4&commit=Go
final_id = 'B0077RQGX4'

https://www.blabla.com/ebookedit?SomethingElse=Something&id=B0077RQGX4&commit=Go
final_id = 'B0077RQGX4'

https://www.blabla.com/ebookedit?commit=go&id=B0077RQGX4
final_id = 'B0077RQGX4'

https://www.blabla.com/ebookedit?commit=Go
final_id = ''

https://www.blabla.com/ebookedit?id=1234&Something=1&id=B0077RQGX4&commit=Go
final_id = '1234'

【讨论】:

如果id 使用这种方法多次出现在查询字符串中会发生什么? 它将返回第一个id【参考方案3】:

试试这个。

function getUrlVars()

  var vars = ;
  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value)   
  
     vars[key] = value;
  );
  return vars;
 


function urlval()

    var x=getUrlVars()["id"];
    alert (x);
 

现在 x 将在 id 中给出 B0077RQGX4 的值

【讨论】:

【参考方案4】:

虽然您可以使用 Regex 来做到这一点,但如果您使用非 Regex 方法,它可能会更容易和/或更一致。之所以如此,是因为查询字符串可能有多种布局(id 值位于第一个、最后一个或中间)。

编辑: @AdrianaVillafañe 证明这可以通过正则表达式轻松完成!我将把这个仅限 JS 的方法留在这里,因为它确实有效。

我喜欢使用这种 JavaScript 方法从 URL 解析查询字符串并获取与所需名称匹配的第一个值。在您的情况下,“id”将是 name 参数。

// parses the query string provided and returns the value
function GetQueryVariable(query, name) 
    if (query.indexOf("?") == 0)  query = query.substr(1); 
    var pairs = query.split("&");
    for (var i = 0; i < pairs.length; i++) 
        var pair = pairs[i].split("=");
        if (pair[0] == name) 
            return pair[1];
        
    
    return "";

要使用此方法,您需要传入 URL 的查询字符串部分和要获取的值的名称。如果你想解析当前请求的 URL,你可以这样做:

var value = GetQueryVariable(location.search, "id");

在尝试处理查询字符串布局的可能变化时,尝试在正则表达式中执行此操作最有可能是不一致的。

【讨论】:

正则表达式非常有趣!但是您的方法绝对是更安全的方法。 +1 我尝试了一段时间(几个月前)设计一个可以执行此操作的单个正则表达式,但我最终得出结论,这个多行 JS 函数会更加一致(并且实际上可以工作! )。请务必接受能帮助您解决问题的最佳答案。 @TLS 如果需要,您可以做类似的事情,但返回一个对象,其中包含所有数据作为属性和值对很容易。在&amp; 上拆分,然后在= 上循环拆分。 @qw3n - 我实际上有一个单独的方法,它返回整个名称/值对,而不仅仅是值。你说得对,让它返回所有匹配的名称/值对并不难。【参考方案5】:

这样的事情应该可以工作。

var url = document.URL;
var regex = new RegExp("id=(.+)&");

var id = url.match(regex)[1];​​​​​​

示例 jsfiddle here.

【讨论】:

这假定“id”不是查询字符串中的最后一个条目。 嗯。 Adriana 的正则表达式更好。【参考方案6】:

嗯,它不是正则表达式,但你可以这样做

id=url.split('id=')[1].split('&')[0];

【讨论】:

假设id始终是第一个参数。

以上是关于从 url 查询字符串中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用vanilla JS从URL查询字符串中获取值

从 .NET 中的字符串获取 URL 参数

Javasrcipt中从一个url或者从一个字符串中获取参数值得方法

使用jQuery / Javascript(查询字符串)获取查询字符串参数url值

如何删除Java中特定字符之前的所有字符?

使用jQuery从URL获取查询字符串[重复]