Javascript从字符串中提取数据?

时间:2013-09-12 19:55:20

标签: javascript parsing

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

var data = window.location.hash;

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

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

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

现在我将那个长字符串存储在变量中,如何解析出访问令牌值,所以介于第一个'='和'&amp ;.之间的所有内容。所以这就是我需要的字符串:

0u2389ruq892hqjru3h289r3u892ru3892r32235423

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

7 个答案:

答案 0 :(得分: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');

答案 1 :(得分:3)

data.split("&")[0].split("=")[1]

答案 2 :(得分:2)

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

var requiredValue = str.split('&')[0].split('=')[1];

答案 3 :(得分:2)

如果值=密钥对更改位置

,我会使用正则表达式
var data = "#token_type=Bearer&access_token=0u2389ruq892hqjru3h289r3u892ru3892r32235423&expires_in=3600";
RegExp("access_token=([A-Za-z0-9]*)&").exec(data)[1];

输出

"0u2389ruq892hqjru3h289r3u892ru3892r32235423"

答案 4 :(得分: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")); 

答案 5 :(得分: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,"=","#");

那就是说,我宁愿选择像粉碎一样的功能......

答案 6 :(得分: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 '='
}

我希望它可以帮到你。