这不是正则表达式解决方案(正则表达式解决方案如下):
字符串似乎是有效的JSON(这就是它被称为 JSON Web 令牌的原因)。使用您选择的语言将其解析为JSON。然后应该很容易提取你想要的任何东西。例如,在 Python 中:
import json
s = '{"user":{"hashId":"c45pq0","email":"info@whatever.com","name": "John Doe","company": null,"rights":[ "STATIC","USERS"]},"jwt":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpcCI6InJvYkB3aXRodGhlZ3JpZC5jb20iLCJpA9qiOjE1Nzc3MTA5NjksImV4cCI6MTU4MDMwMjk2OSwiaXNzIjoid2l0aHRoZWdyaWQifQ.7PbwwsWU7x63Pd-J_KZQL22r185GfiufixyXQGOyQs8","environment":{"hashId":"abcd123","name":"Doe"},"environmentRights": ["STATIC","USERS"]}'
d = json.loads(s)
print(d['jwt'])
print(d['environment']['hashId'])
打印:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpcCI6InJvYkB3aXRodGhlZ3JpZC5jb20iLCJpA9qiOjE1Nzc3MTA5NjksImV4cCI6MTU4MDMwMjk2OSwiaXNzIjoid2l0aHRoZWdyaWQifQ.7PbwwsWU7x63Pd-J_KZQL22r185GfiufixyXQGOyQs8
abcd123
在 JavaScript 中:
const s = '{"user":{"hashId":"c45pq0","email":"info@whatever.com","name": "John Doe","company": null,"rights":[ "STATIC","USERS"]},"jwt":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpcCI6InJvYkB3aXRodGhlZ3JpZC5jb20iLCJpA9qiOjE1Nzc3MTA5NjksImV4cCI6MTU4MDMwMjk2OSwiaXNzIjoid2l0aHRoZWdyaWQifQ.7PbwwsWU7x63Pd-J_KZQL22r185GfiufixyXQGOyQs8","environment":{"hashId":"abcd123","name":"Doe"},"environmentRights": ["STATIC","USERS"]}'
const d = JSON.parse(s);
console.log(d.jwt);
console.log(d.environment.hashId);
正则表达式解决方案
这个正则表达式可能有点“矫枉过正”,我不认为" 不能出现在jwt 或hashId 字段中(当然,正确转义)。我的一些研究可以回答这个问题,但是......
"jwt":\s*"((?:(?!(?<!\\)").)*)".*?"hashId":\s*"((?:(?!(?<!\\)").)*)"
-
"jwt":\s*" 匹配“jwt”:后跟 0 个或多个空格字符,后跟“。
-
((?:(?!(?<!\\)").)*) 匹配 0 个或多个字符,只要它们不是前面没有反斜杠的 " 字符,并将这些字符累积到捕获组 1 中。
-
" 匹配“。
-
.*? 非贪婪匹配 0 个或多个非换行符,直到 ...
-
"hashId":\s*" 匹配“hashId”:后跟 0 个或多个空格字符,后跟“.
-
((?:(?!(?<!\\)").)*) 匹配 0 个或多个字符,只要它们不是前面没有反斜杠的 " 字符,并将这些字符累积到捕获组 2 中。
-
" 匹配“。
您想要的值在捕获组 1 和 2 中。
Regex Demo
import re
s = '{"user":{"hashId":"c45pq0","email":"info@whatever.com","name": "John Doe","company": null,"rights":[ "STATIC","USERS"]},"jwt":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpcCI6InJvYkB3aXRodGhlZ3JpZC5jb20iLCJpA9qiOjE1Nzc3MTA5NjksImV4cCI6MTU4MDMwMjk2OSwiaXNzIjoid2l0aHRoZWdyaWQifQ.7PbwwsWU7x63Pd-J_KZQL22r185GfiufixyXQGOyQs8","environment":{"hashId":"abcd123","name":"Doe"},"environmentRights": ["STATIC","USERS"]}'
m = re.search(r'"jwt":\s*"((?:(?!(?<!\\)").)*)".*?"hashId":\s*"((?:(?!(?<!\\)").)*)"', s)
if m:
print(m[1])
print(m[2])
打印:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpcCI6InJvYkB3aXRodGhlZ3JpZC5jb20iLCJpA9qiOjE1Nzc3MTA5NjksImV4cCI6MTU4MDMwMjk2OSwiaXNzIjoid2l0aHRoZWdyaWQifQ.7PbwwsWU7x63Pd-J_KZQL22r185GfiufixyXQGOyQs8
abcd123