正则表达式正向预测未按预期工作[已关闭]

问题描述 投票:0回答:1

regex101 screenshot

我想提取以下字符串:

/e670d0d1-bcf2-47f7-879b-64ab40600ff8-u1/mask_00005.png

来自此测试字符串:

https://s3.us-east-005.backblazeb2.com/ph/e670d0d1-bcf2-47f7-879b-64ab40600ff8-u1/mask_00005.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=005dc68faa31bb70000000004%2F20240417%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240417T092401Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a82f66f63086597ab49651ba91edb31133875d64415ecb54317c8766df0b0950
(?<=https:\/\/s3\.us-east-005\.backblazeb2\.com\/ph)(.*)(?=\?X-Amz-Algorithm)

尝试过https://regex101.com/,但它没有返回任何内容,我不明白为什么。

javascript regex
1个回答
0
投票

您可以使用 UUID 正则表达式作为基础,并添加子路径和文件名。

const uuidRegex = /[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}/

此外,您还可以使用正向前瞻

(?=<?)
在查询参数开始处停止。

const url = 'https://s3.us-east-005.backblazeb2.com/ph/e670d0d1-bcf2-47f7-879b-64ab40600ff8-u1/mask_00005.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=005dc68faa31bb70000000004%2F20240417%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240417T092401Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=a82f66f63086597ab49651ba91edb31133875d64415ecb54317c8766df0b0950'

const regex = /\/[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}-\w{2}\/(\w+\.[a-z]+)(?=<?)/;
const target = '/e670d0d1-bcf2-47f7-879b-64ab40600ff8-u1/mask_00005.png';

const [found, filename] = url.match(regex);

console.log(found);
console.log(found === target); // true
console.log(filename);         // mask_00005.png

© www.soinside.com 2019 - 2024. All rights reserved.