我试图捕捉一个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_idres.cloudinary.com:主机
测试站点:cloudname
上传/facebook:resource_type
v1619174590/rg/collective/media/cjtdn73cleqagpy4fqza.jpg:id
我需要忽略/upload/和/v之间的所有内容,我已经使用//upload/.*?\b(?=v1)/完成了这一任务,但是如果资源类型是facebook且没有/v123,则不考虑此问题。
发布于 2021-05-07 16:13:21
您可以使用
https?:\/\/(?<host>[^\/]+)\/(?<cloudname>[^\/]+)\/[^\/]+\/(?<resource_type>[^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(?<id>.*)
https?:\/\/([^\/]+)\/([^\/]+)\/[^\/]+\/([^\/]+)(?:\/[^\/,]*,[^\/]*)?\/(.*)第一种正则表达式符合支持命名捕获组的ECMAScript 2018+标准,而第二种只包含常规的、编号的捕获组。
见regex演示。
详细信息
https?:\/\/ - https://或http://([^\/]+) -第1组(主机):除/ - \/以外的一个或多个字符-a / char([^\/]+) -第2组(云名称):/以外的一个或多个字符\/[^\/]+\/ - /,除/和/以外的任何一个或多个字符。([^\/]+) -第3组(资源类型):/以外的一个或多个字符(?:\/[^\/,]*,[^\/]*)? -一个可选的序列\/ -a / char[^\/,]* - /和,以外的零或多个字符, -逗号[^\/]* -除/以外的零个或多个字符\/ -a / char(.*) -第4组(id):字符串的其余部分。发布于 2021-05-07 17:41:24
我假设您的问题是特定于Cloudinary URL格式的。如果这是正确的,URL格式将遵循以下模式:
在您的示例URL 700/v1619174590/folder/path/cjtdn73cleqagpy4fqza.jpg中,这将映射如下:
使用此逻辑,捕获大多数URL的正则表达式如下:
(https?)\:\/\/(res.cloudinary.com)\/([^/]+)\/(image|video|raw)\/(upload|authenticated)\/(.*)\/(v[0-9]+)\/(.+)(?:\.[a-z]{3})?https://stackoverflow.com/questions/67428975
复制相似问题