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 格式将遵循以下模式:

  1. 协议(http 或 https)
  2. 域 (res.cloudinary.com)
  3. 云名称/子账号名称
  4. 资源类型(图像、视频或原始数据)
  5. 可见性(上传、认证)
  6. 转换(或链式转换)
  7. 版本号
  8. 您的资源路径在 Cloudinary 术语中也称为 public-id
  9. 扩展(注意扩展不被认为是 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 中,映射如下:

  1. https - 协议
  2. res.cloudinary.com - 域名
  3. 测试站点-云名称
  4. 图片 - 资源类型
  5. 上传 - 可见性(即 public 资产)
  6. ar_1:1,c_fill,f_auto,g_auto,w_700 - 变换
  7. v1619174590 - 版本号
  8. folder/path/cjtdn73cleqagpy4fqza
  9. jpg - 扩展名。如果没有 f_auto,结果将是 JPG 图片。

使用此逻辑,捕获大多数 URL 的正则表达式如下:

(https?)\:\/\/(res.cloudinary.com)\/([^/]+)\/(image|video|raw)\/(upload|authenticated)\/(.*)\/(v[0-9]+)\/(.+)(?:\.[a-z]{3})?