我有一个很长的网址,其中包含一些我需要提取的数据。我可以通过这样做来获得URL的结尾:
var data = window.location.hash;
当我alert(data);
时,我会收到这样的长字符串:
#access_token=0u2389ruq892hqjru3h289r3u892ru3892r32235423&token_type=Bearer&expires_in=3600
请注意,示例中的访问令牌无效,只是我为了示例目的而输入的随机数
现在我将那个长字符串存储在变量中,如何解析出访问令牌值,所以介于第一个'='和'&amp ;.之间的所有内容。所以这就是我需要的字符串:
0u2389ruq892hqjru3h289r3u892ru3892r32235423
我正在阅读php explode,以及其他java脚本特定的东西,如strip但无法让它们按需运行。谢谢你们。
答案 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 '='
}
我希望它可以帮到你。