cloudinary url 的正则表达式组
Regex groups for cloudinary url
我试图捕捉 url 的不同部分,同时忽略有时出现的部分。
我曾尝试使用和扩展此处找到的正则表达式,但运气不佳。 https://gist.github.com/ahmadawais/9813c44b7e51c2c3540d2165d6c6cc65
举个例子
https://res.cloudinary.com/test-site/image/upload/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg
https://res.cloudinary.com/test-site/image/upload/ar_1:1,c_fill,f_auto,g_auto,w_700/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg
https://res.cloudinary.com/test-site/image/facebook/fb_id
res.cloudinary.com : 主机
测试站点:云名称
upload/facebook: resource_type
v1619174590/rg/collective/media/cjtdn73cleqagpy4fqza.jpg: id
我需要忽略 /upload/ 和 /v 之间的所有内容,我已经使用 //upload/.*?\b(?=v1)/ 完成了此操作,但它没有考虑资源是否类型是 facebook,没有 /v123
你可以使用
https?:\/\/(?<host>[^\/]+)\/(?<cloudname>[^\/]+)\/[^\/]+\/(?<resource_type>[^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(?<id>.*)
https?:\/\/([^\/]+)\/([^\/]+)\/[^\/]+\/([^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(.*)
第一个正则表达式符合支持命名捕获组的 ECMAScript 2018+ 标准,第二个仅包含常规的编号捕获组。
参见regex demo。
详情
https?:\/\/
- https://
或 http://
([^\/]+)
- 第 1 组(主机):/
以外的一个或多个字符
- \/
- 一个/
字符
([^\/]+)
- 第 2 组(云名称):除 /
之外的一个或多个字符
\/[^\/]+\/
- /
,除 /
和 /
之外的任何一个或多个字符
([^\/]+)
- 第 3 组(资源类型):除 /
之外的一个或多个字符
(?:\/[^\/,]*,[^\/]*)?
- 一个可选的序列
\/
- 一个 /
字符
[^\/,]*
- /
和 ,
以外的零个或多个字符
,
- 逗号
[^\/]*
- /
以外的零个或多个字符
\/
- 一个 /
字符
(.*)
- 第 4 组 (id):字符串的其余部分。
我假设您的问题是针对 Cloudinary URL 格式的。如果正确,URL 格式将遵循以下模式:
- 协议(http 或 https)
- 域 (res.cloudinary.com)
- 云名称/子账号名称
- 资源类型(图像、视频或原始数据)
- 可见性(上传、认证)
- 转换(或链式转换)
- 版本号
- 您的资源路径在 Cloudinary 术语中也称为 public-id
- 扩展(注意扩展不被认为是 Cloudinary 中 public-id 的一部分)
在您的示例 URL https://res.cloudinary.com/test-site/image/upload/ar_1:1,c_fill,f_auto,g_auto,w_700/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg 中,映射如下:
- https - 协议
- res.cloudinary.com - 域名
- 测试站点-云名称
- 图片 - 资源类型
- 上传 - 可见性(即 public 资产)
- ar_1:1,c_fill,f_auto,g_auto,w_700 - 变换
- v1619174590 - 版本号
- folder/path/cjtdn73cleqagpy4fqza
- jpg - 扩展名。如果没有 f_auto,结果将是 JPG 图片。
使用此逻辑,捕获大多数 URL 的正则表达式如下:
(https?)\:\/\/(res.cloudinary.com)\/([^/]+)\/(image|video|raw)\/(upload|authenticated)\/(.*)\/(v[0-9]+)\/(.+)(?:\.[a-z]{3})?
我试图捕捉 url 的不同部分,同时忽略有时出现的部分。
我曾尝试使用和扩展此处找到的正则表达式,但运气不佳。 https://gist.github.com/ahmadawais/9813c44b7e51c2c3540d2165d6c6cc65
举个例子
https://res.cloudinary.com/test-site/image/upload/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg
https://res.cloudinary.com/test-site/image/upload/ar_1:1,c_fill,f_auto,g_auto,w_700/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg
https://res.cloudinary.com/test-site/image/facebook/fb_id
res.cloudinary.com : 主机
测试站点:云名称
upload/facebook: resource_type
v1619174590/rg/collective/media/cjtdn73cleqagpy4fqza.jpg: id
我需要忽略 /upload/ 和 /v 之间的所有内容,我已经使用 //upload/.*?\b(?=v1)/ 完成了此操作,但它没有考虑资源是否类型是 facebook,没有 /v123
你可以使用
https?:\/\/(?<host>[^\/]+)\/(?<cloudname>[^\/]+)\/[^\/]+\/(?<resource_type>[^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(?<id>.*)
https?:\/\/([^\/]+)\/([^\/]+)\/[^\/]+\/([^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(.*)
第一个正则表达式符合支持命名捕获组的 ECMAScript 2018+ 标准,第二个仅包含常规的编号捕获组。
参见regex demo。
详情
https?:\/\/
-https://
或http://
([^\/]+)
- 第 1 组(主机):/
以外的一个或多个字符 -\/
- 一个/
字符([^\/]+)
- 第 2 组(云名称):除/
之外的一个或多个字符
\/[^\/]+\/
-/
,除/
和/
之外的任何一个或多个字符
([^\/]+)
- 第 3 组(资源类型):除/
之外的一个或多个字符
(?:\/[^\/,]*,[^\/]*)?
- 一个可选的序列\/
- 一个/
字符[^\/,]*
-/
和,
以外的零个或多个字符
,
- 逗号[^\/]*
-/
以外的零个或多个字符
\/
- 一个/
字符(.*)
- 第 4 组 (id):字符串的其余部分。
我假设您的问题是针对 Cloudinary URL 格式的。如果正确,URL 格式将遵循以下模式:
- 协议(http 或 https)
- 域 (res.cloudinary.com)
- 云名称/子账号名称
- 资源类型(图像、视频或原始数据)
- 可见性(上传、认证)
- 转换(或链式转换)
- 版本号
- 您的资源路径在 Cloudinary 术语中也称为 public-id
- 扩展(注意扩展不被认为是 Cloudinary 中 public-id 的一部分)
在您的示例 URL https://res.cloudinary.com/test-site/image/upload/ar_1:1,c_fill,f_auto,g_auto,w_700/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg 中,映射如下:
- https - 协议
- res.cloudinary.com - 域名
- 测试站点-云名称
- 图片 - 资源类型
- 上传 - 可见性(即 public 资产)
- ar_1:1,c_fill,f_auto,g_auto,w_700 - 变换
- v1619174590 - 版本号
- folder/path/cjtdn73cleqagpy4fqza
- jpg - 扩展名。如果没有 f_auto,结果将是 JPG 图片。
使用此逻辑,捕获大多数 URL 的正则表达式如下:
(https?)\:\/\/(res.cloudinary.com)\/([^/]+)\/(image|video|raw)\/(upload|authenticated)\/(.*)\/(v[0-9]+)\/(.+)(?:\.[a-z]{3})?