-1

我有一个长 URL,其中包含一些我需要提取的数据。我可以通过这样做来获得 URL 的结尾:

var data = window.location.hash;

当我这样做时,alert(data);我会收到一个像这样的长字符串:

#access_token=0u2389ruq892hqjru3h289r3u892ru3892r32235423&token_type=Bearer&expires_in=3600

请注意示例中的访问令牌无效,只是我输入的随机数

现在我已经将那个长字符串存储在一个变量中,我怎样才能解析出访问令牌值,所以第一个'='和'&之间的所有内容。所以这就是我需要的字符串:

0u2389ruq892hqjru3h289r3u892ru3892r32235423

我正在阅读 php explode 和其他 java 脚本特定的东西,比如 strip 但无法让它们按需要运行。多谢你们。

4

7 回答 7

3

DEMO(查看您的调试控制台)

您将首先希望通过令牌拆分字符串'&'以获取您的键/值对:

var kvpairs = document.location.hash.substring(1).split('&');

然后,您需要将每个 kvpair 拆分为一个键和一个值:

for (var i = 0; i < kvpairs.length; i++) {
    var kvpair = kvpairs[i].split('=');

    var k = kvpair[0];
    var v = kvpair[1];

    if (k != 'access_token')
        continue;

    console.log(v); //Here's your access token.
}

这是一个包含在您可以轻松使用的函数中的版本:

function getParam(hash, key) {
    var kvpairs = hash.substring(1).split('&');

    for (var i = 0; i < kvpairs.length; i++) {
        var kvpair = kvpairs[i].split('=');

        var k = kvpair[0];
        var v = kvpair[1];

        if (k != key)
            continue;

        return v;
    }    

    return null;
}

用法:

getParam(document.location.hash, 'access_token');
于 2013-09-12T19:58:45.513 回答
3
data.split("&")[0].split("=")[1]
于 2013-09-12T19:59:17.303 回答
2
var str = "#access_token=0u2389ruq892hqjru3h289r3u892ru3892r32235423&token_type=Bearer&expires_in=3600";

var requiredValue = str.split('&')[0].split('=')[1];
于 2013-09-12T20:01:25.857 回答
2

如果 value=key pair 改变位置,我会使用正则表达式

var data = "#token_type=Bearer&access_token=0u2389ruq892hqjru3h289r3u892ru3892r32235423&expires_in=3600";
RegExp("access_token=([A-Za-z0-9]*)&").exec(data)[1];

输出

"0u2389ruq892hqjru3h289r3u892ru3892r32235423"
于 2013-09-12T20:15:00.943 回答
2

看来我在这方面有点晚了。这是我对将 URL 参数解析为地图并按名称获取任何参数的版本的尝试。

var str = "#access_token=0u2389ruq892hqjru3h289r3u892ru3892r32235423&token_type=Bearer&expires_in=3600";

function urlToMap(url){
    var startIndex = Math.max(url.lastIndexOf("#"), url.lastIndexOf("?"));
    url = url.substr(startIndex+1);
    var result = {};
    url.split("&").forEach(function(pair){
        var x = pair.split("=");
        result[x[0]]=x[1];
    });
    return result;
}

function getParam(url, name){
    return urlToMap(url)[name];
}

console.log(getParam(str, "access_token")); 
于 2013-09-12T20:23:15.653 回答
1

要直接回答您的问题(这个和那个之间是什么),您需要使用 indexOf 和 substring 函数。

这是给你的一小段代码。

    function whatsBetween (_strToSearch, _leftText, _rightText) {
        var leftPos = _strToSearch.indexOf(_leftText) + _leftText.length;
        var rightPos = _strToSearch.indexOf(_rightText, leftPos);
        if (leftPos >= 0 && leftPos < rightPos)
            return _strToSearch.substring(leftPos, rightPos);
        return "";
    }

用法:

alert(whatsBetween, data,"=","#");

也就是说,我宁愿使用像美眉这样的功能......

于 2013-09-12T20:21:35.887 回答
0

尝试这个

var data = window.location.hash;
var d1 = Array();
d1 = data.split("&")
var myFilteredData = Array();
for( var i=0;i<d1.length;i++ )
{
 var d2 = d1[i].split("=");
 myFilteredData.push(d2[1]); //Taking String after '='
}

我希望它对你有帮助。

于 2013-09-12T20:06:48.470 回答