Javascript cloudinary url的正则表达式组

Javascript cloudinary url的正则表达式组,javascript,regex,cloudinary,Javascript,Regex,Cloudinary,我试图捕获url的不同部分,而忽略有时出现的部分 我尝试过使用和扩展这里的正则表达式,但运气不佳 举个例子 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/

我试图捕获url的不同部分,而忽略有时出现的部分

我尝试过使用和扩展这里的正则表达式,但运气不佳

举个例子

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:主机

测试站点:cloudname

上传/facebook:资源类型

v1619174590/rg/collective/media/cjtdn73cleqagpy4fqza.jpg:id

我需要忽略/upload/和/v之间的所有内容,我已经使用//upload/*?\b(?=v1)/,完成了这一点,但它不考虑资源类型是否为facebook,并且没有可以使用的/v123

https?:\/\/(?[^\/]+)\/(?[^\/]+)\/[^\/]+\/(?[^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(?*)
https?:\/\/([^\/]+)\/([^\/]+)\/[^\/]+\/([^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(*)
第一个正则表达式符合支持命名捕获组的ECMAScript 2018+标准,第二个正则表达式只包含常规的、编号的捕获组

细节

  • https?:\/\/
    -
    https://
    http://
  • ([^\/]+)
    -组1(主机):除
    /
    -
    \/
    -a
    /
    字符
  • ([^\/]+)
    -组2(云名称):除
    /
  • \/[^\/]+\/
    -
    /
    ,除
    /
    /
    以外的任何一个或多个字符
  • ([^\/]+)
    -组3(资源类型):除
    /
  • (?:\/[^\/,]*,[^\/]*)?
    -可选的
    • \/
      -a
      /
      字符
    • [^\/,]*
      -除
      /
      以外的零个或多个字符
    • -逗号
    • [^\/]*
      -除
      /
  • \/
    -a
    /
    字符
  • (.*)
    -组4(id):字符串的其余部分

我假设您的问题特定于Cloudinary URL格式。如果正确,URL格式将遵循以下模式:

  • 协议(http或https)
  • 域名(res.cloudinary.com)
  • 云名称/子帐户名称
  • 资源类型(图像、视频或原始)
  • 可见性(上传、验证)
  • 转换(或链式转换)
  • 版本号
  • 资源的路径在Cloudinary术语中也称为公共id
  • 扩展(请注意,在Cloudinary中,扩展不被视为公共id的一部分)
  • 在您的示例URL中,这将映射如下:

    (https?)\:\/\/(res.cloudinary.com)\/([^/]+)\/(image|video|raw)\/(upload|authenticated)\/(.*)\/(v[0-9]+)\/(.+)(?:\.[a-z]{3})?
    
  • https协议
  • res.cloudinary.com-域名
  • 测试站点-云名称
  • 图像资源类型
  • 上传-可见性(即公共资产)
  • ar_1:1,c_填充,f_自动,g_自动,w_700-转换
  • v1619174590-版本号
  • 文件夹/path/cjtdn73cleqagpy4fqza
  • jpg-扩展。如果没有f_auto,结果将是JPG图像
  • 使用此逻辑,捕获大多数URL的正则表达式如下所示:

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

    不太清楚,你的意思是你想要
    https?:\/\/(?[^\/]+)\/(?[^\/]+)\/[^\/]+\/[^\/]+(?[^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(?*
    ?看见也就是说,在
    resource\u type
    之后不包括一个带有逗号的部分。似乎您的演示程序在我这边测试过的案例中有效。太好了,我发布了。