4

我有以下 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 中使用哪些函数?

4

6 回答 6

17

我想出了这个:

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'
于 2012-04-12T15:56:37.937 回答
4

虽然您可以使用 Regex 执行此操作,但如果您使用非 Regex 方法,它可能会更容易和/或更一致。之所以出现这种情况,是因为查询字符串可能有多种布局(id值为 first、last 或中间)。

编辑: @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");

在尝试处理查询字符串布局的可能变化时,尝试在 Regex 中执行此操作很可能是不一致的。

于 2012-04-12T15:51:20.290 回答
1

试试这个。

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 的值

于 2013-04-25T13:29:09.523 回答
0

像这样的东西应该工作。

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

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

此处为 jsfiddle 示例。

于 2012-04-12T15:44:40.030 回答
0

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

id=url.split('id=')[1].split('&')[0];
于 2012-04-12T15:28:53.177 回答
0

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

<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>
于 2021-06-17T23:12:52.350 回答