JavaScript分割字符串并提取特定部分实现方案咨询
没问题,这事儿在JavaScript里实现起来超简单,我给你两种靠谱的方案,按需选就行:
方法1:用URL对象解析(最推荐,稳得一批)
现代浏览器都支持原生的URL对象,它能帮我们优雅地处理URL的各个部分,包括哈希(#)里的参数,完全不用自己写复杂的分割逻辑:
// 先把你的URL存到变量里(如果是当前页面的URL,直接用window.location就行) const targetUrl = "/account/register#id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik56RXhNemRETUVRME9EWkdOMFJHUmtRMk9VUXdNemxFUWpWQk1UaEdNVFpCTURneU0wWXhSZyJ9.eyJuaWNrbmFtZSI6ImhlbGxvIiwibmFtZSI6ImhlbGxvQGhlbGxvLmNvbSIsInBpY3R1cmUiOiJodHRwczovL3MuZ3JhdmF0YXIuY29tL2F2YXRhci9kMzZlZWYzMjYyNTM2N2E0M2RhNjNhOTkwOWJhNzE2ZT9zPTQ4MCZyPXBnJmQ9aHR0cHMlM0ElMkYlMkZjZG4uYXV0aDAuY29tJTJGYXZhdGFycyUyRmhlLnBuZyIsInVwZGF0ZWRfYXQiOiIaGlyc3R5c3R1ZGlvcy5hdS5hdXR..."; // 创建URL实例(第二个参数是当前页面的origin,确保相对URL能被正确解析) const url = new URL(targetUrl, window.location.origin); // 把哈希部分转成URLSearchParams对象,方便提取参数(slice(1)是去掉开头的#) const hashParams = new URLSearchParams(url.hash.slice(1)); // 直接get出id_token的值 const idToken = hashParams.get('id_token'); console.log(idToken); // 这就是你要的那串token啦
这个方法的好处是自动处理哈希里的多个参数——比如如果哈希是#id_token=xxx&expires_in=3600,它也能精准提取id_token,不会把后面的参数带进来,容错性拉满。
方法2:字符串分割(适合极简场景)
如果你能确定哈希里只有id_token这一个参数,也可以用字符串分割快速搞定,代码更短:
const targetUrl = "/account/register#id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik56RXhNemRETUVRME9EWkdOMFJHUmtRMk9VUXdNemxFUWpWQk1UaEdNVFpCTURneU0wWXhSZyJ9.eyJuaWNrbmFtZSI6ImhlbGxvIiwibmFtZSI6ImhlbGxvQGhlbGxvLmNvbSIsInBpY3R1cmUiOiJodHRwczovL3MuZ3JhdmF0YXIuY29tL2F2YXRhci9kMzZlZWYzMjYyNTM2N2E0M2RhNjNhOTkwOWJhNzE2ZT9zPTQ4MCZyPXBnJmQ9aHR0cHMlM0ElMkYlMkZjZG4uYXV0aDAuY29tJTJGYXZhdGFycyUyRmhlLnBuZyIsInVwZGF0ZWRfYXQiOiIaGlyc3R5c3R1ZGlvcy5hdS5hdXR..."; // 先切出#后面的部分,再切出=后面的token const idToken = targetUrl.split('#')[1].split('=')[1]; console.log(idToken);
不过要注意:如果哈希里有多个参数,这个方法就会失效(比如会把id_token=xxx&expires_in=3600切成xxx&expires_in=3600),所以只适合简单场景。
小提醒
- 如果是当前页面的URL,不用手动传
targetUrl,直接用window.location.hash就能拿到哈希部分。 - 拿到token后,记得要做必要的验证(比如格式、签名),别直接就用哦~
内容的提问来源于stack exchange,提问作者Smokey Dawson
相关产品推荐
相关产品推荐

