我没有正则表达式的经验,我请求你的帮助。
我需要一个正则表达式来捕获以下字符串中的 JWT:
"contextJwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJIZWxsbyB5b3UiLCJuYW1lIjoiV2h5IGFyZSB5b3UgY2hlY2tpbmcgbXkgdG9rZW4_ICggzaHCsCDNnMqWIM2hwrApIiwiaWF0IjoxNTE2MjM5MDIyfQ.yAP0xiTwp6vqIYbLKLVBRv-gTyMvU17rT3H8uErLjHA"
谢谢你的时间
Ale*_*x_P 25
我创建了一个正则表达式,它可能不是最优雅的,但它似乎有效。
(^[A-Za-z0-9-_]*\.[A-Za-z0-9-_]*\.[A-Za-z0-9-_]*$)
Run Code Online (Sandbox Code Playgroud)
更简洁的版本也可以是:
(^[\w-]*\.[\w-]*\.[\w-]*$)
Run Code Online (Sandbox Code Playgroud)
但是,我相信非拉丁字符也是允许的,而 JWT 是不允许的。
如果您将 HTML 文档作为字符串使用,并且使用 Javascript 来运行正则表达式,则可以执行如下操作:
const html = '<div>stuff</div>something "contextJwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJIZWxsbyB5b3UiLCJuYW1lIjoiV2h5IGFyZSB5b3UgY2hlY2tpbmcgbXkgdG9rZW4_ICggzaHCsCDNnMqWIM2hwrApIiwiaWF0IjoxNTE2MjM5MDIyfQ.yAP0xiTwp6vqIYbLKLVBRv-gTyMvU17rT3H8uErLjHA" <div> other stuff</div>';
var regex = /"contextJwt":\s*"(.*)"/;
console.log(html.match(regex)[1]);
/* yields the encoded JWT string:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJIZWxsbyB5b3UiLCJuYW1lIjoiV2h5IGFyZSB5b3UgY2hlY2tpbmcgbXkgdG9rZW4_ICggzaHCsCDNnMqWIM2hwrApIiwiaWF0IjoxNTE2MjM5MDIyfQ.yAP0xiTwp6vqIYbLKLVBRv-gTyMvU17rT3H8uErLjHA
*/
Run Code Online (Sandbox Code Playgroud)
您可以将匹配从简单的字符加强(.*)到有效编码 JWT 中允许的特定字符(根据 Helio Santo 的答案),但由于正则表达式很挑剔,我通常从最简单的解决方案开始,只在必要时收紧它。
您如何处理表示编码 JWT 的字符串可能完全是另一个问题。