所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

从链接中取图片名称不用找工具!正则表达式轻松搞定

从链接中取图片名称不用找工具!正则表达式轻松搞定 一

文章目录CloseOpen

是不是觉得正则听起来很高深?别怕,这篇文章要讲的是“普通人能学会的正则用法”——不用记复杂公式,只要掌握几个关键规则,就能拆解各种类型的链接:不管是带参数的电商图链接、藏在多级文件夹里的公众号封面图,还是带特殊字符的海外图链接,都能快速提取出像“product_001.jpg”“cover_秋天.png”这样的原始文件名。

我们会用超直白的例子一步步教你:比如怎么写第一行正则代码、怎么匹配“.”后的后缀、怎么跳过没用的参数。就算你是第一次接触正则,跟着走一遍也能立刻上手,以后再也不用为“找图片名”多花10分钟——省下来的时间,喝杯奶茶不香吗?

你有没有过这种崩溃时刻?下载一张图片,文件名要么是一串乱码(比如“cover_%E7%BE%8E%E9%A3%9F.jpg”),要么带一堆看不懂的参数(比如“product_001.jpg?w=800&h=600”),要是批量处理几十张,得手动改到手腕酸——更气人的是,找了一堆“在线提取图片名”工具,要么要收费,要么限速,要么连带参数的链接都处理不了。

其实我去年帮朋友的美食博客处理图片时,也踩过一模一样的坑。他的图片链接全是“https://img.example.com/202405/cover_%E7%BE%8E%E9%A3%9F.jpg?x-oss-process=image/resize,w_800”这种,下载下来文件名要么是“cover_%E7%BE%8E%E9%A3%9F.jpg”(打开是乱码),要么是“cover_美食.jpg?x-oss-process=image/resize,w_800”(带一堆参数),他得一个个手动删参数、转码,我说“你咋不用正则表达式呢?不用找工具,自己写两行代码就能搞定”,他瞪着眼说“正则不是程序员才会的吗?我一个写美食的哪会啊?”

结果我花10分钟教他,他当天就把200张图片的文件名全提出来了——真不是正则难,是没人把“程序员的工具”翻译成“普通人能听懂的话”。今天就把我帮过3个行业(美食、电商、教育)运营用的“正则提图片名”方法,拆成你能立刻上手的步骤,看完你也能当“链接拆解小能手”。

为什么从链接里提图片名,总踩坑?

先得说清楚:你提不出干净的图片名,真不是你“手笨”,是链接本身的结构在“搞事情”。我帮过的运营里,90%遇到的都是这3种“坑人链接”:

  • 带CDN参数的链接(最常见)
  • 比如“https://img.example.com/product.jpg?x-oss-process=image/resize,w_800”——后面的“?x-oss-process=…”是阿里云OSS的图片处理参数,用来调整尺寸、压缩质量。服务器会把这些参数“粘”在图片名后面,但下载时系统会把整个字符串当文件名,所以你得到的是“product.jpg?x-oss-process=image/resize,w_800”,得手动删参数。

  • 带特殊字符的链接(乱码元凶)
  • 比如“https://img.example.com/cover_%E7%BE%8E%E9%A3%9F.jpg”——这里的“%E7%BE%8E%E9%A3%9F”是“美食”的URL编码(因为URL里不能有中文,得转成%开头的字符)。下载时如果系统没自动解码,文件名就会变成乱码,你得手动把“%E7%BE%8E%E9%A3%9F”转成“美食”。

  • 多级目录嵌套的链接(找不到“起点”)
  • 比如“https://img.example.com/uploads/2024/05/12/hero_image.png”——链接里有“uploads/2024/05/12/”这么多目录,新手会误以为“hero_image.png”前面的“12/”是文件名的一部分,但其实图片名是最后一个“/”后面的部分。

    我朋友那美食博客的链接,刚好占了前两种——又带参数又带编码,他改了3天文件名,改到怀疑人生。后来我告诉他:“这些问题正则都能解决——它能‘精准定位’图片名的位置,不管前面有多少目录、后面有多少参数,直接‘抠’出你要的部分。”

    用正则提图片名,其实就这3步(附可复制的模板)

    正则听起来“高大上”,但本质就是“找规律”——只要你能说出“图片名长什么样”,正则就能帮你“抓出来”。我把帮3个行业运营用的方法,拆成“找特征→写模板→测结果”3步,每一步都给你“抄作业”的例子。

    第一步:先搞懂“图片名的特征”(关键中的关键)

    不管链接多复杂,图片名都有两个“死特征”:

  • 特征1:图片名一定在“最后一个/”后面(比如“https://img.example.com/202405/cover.jpg”,最后一个/后面是“cover.jpg”);
  • 特征2:图片名一定以“.jpg/.png/.gif/.webp” (常见后缀,覆盖99%的图片);
  • 特征3:如果有参数(比如?w=800),图片名一定在“?”前面(比如“cover.jpg?w=800”,“?”前面是“cover.jpg”)。
  • 举个例子:

    链接:https://img.example.com/uploads/2024/05/cover_%E7%BE%8E%E9%A3%9F.jpg?w=800

    最后一个/后面的内容:cover_%E7%BE%8E%E9%A3%9F.jpg?w=800

    “?”前面的内容:cover_%E7%BE%8E%E9%A3%9F.jpg

    ——这就是你要的图片名!

    再复杂的链接,只要抓住“最后一个/ + 后缀 + ?前面”这三个点,就能找到图片名。

    第二步:写正则模板(直接复制,不用记)

    正则的“模板”就是把“特征”翻译成“正则符号”。我帮运营们用的“万能模板”是:

    [^/]+?.(jpg|png|gif|webp)(?=?|$)

    别急,我用“人话”给你拆了每个部分:

  • [^/]:匹配“除了/以外的任意字符”(避免把前面的目录算进去);
  • +?:“尽可能少匹配”(防止把后面的参数也算进去,比如“cover.jpg?w=800”,不会匹配到“cover.jpg?w=800”,只会到“cover.jpg”);
  • .(jpg|png|gif|webp):匹配“.jpg”“png”等常见后缀(.是转义,因为正则里“.”代表任意字符,得加才是真的“.”);
  • (?=?|$):“提前看一眼后面”——如果后面有“?”,就停在“?”前面;如果没有“?”(链接 ),就停在
  • 简单来说,这个模板的意思是:“从最后一个/开始,找一段不带/的字符,以.jpg/png/gif/webp 后面要么是?要么是链接结束”——刚好对应图片名的3个特征!

    第三步:用工具测模板(5秒验证对不对)

    写好模板别着急用,先找个在线工具测一测——我常用的是Regex101(https://regex101.com/,加了nofollow,放心点),步骤超简单:

  • 打开Regex101,选择“Python”或“JavaScript”(随便选,结果一样);
  • 把你的链接复制到“Test String”框里(比如“https://img.example.com/uploads/2024/05/cover_%E7%BE%8E%E9%A3%9F.jpg?w=800”);
  • 把刚才的模板复制到“Regular Expression”框里;
  • 看右边的“Match Information”——如果绿色高亮的部分是你要的图片名(比如“cover_%E7%BE%8E%E9%A3%9F.jpg”),就对了!
  • 要是遇到“后缀不常见”的情况(比如.svg、.avif),只要把模板里的“(jpg|png|gif|webp)”改成“(jpg|png|gif|webp|svg|avif)”就行——超灵活!

    附:常见链接类型的正则测试表(直接抄)

    我把帮运营们处理过的“奇葩链接”整理成了表格,连模板带结果都给你列好了,直接对照用:

    链接类型 示例链接 正则模板 匹配结果
    带CDN参数 https://img.example.com/product.jpg?w=800 [^/]+?.(jpg|png|gif|webp)(?=?|$) product.jpg
    带URL编码 https://img.example.com/cover_%E7%BE%8E%E9%A3%9F.jpg [^/]+?.(jpg|png|gif|webp)(?=?|$) cover_%E7%BE%8E%E9%A3%9F.jpg
    多级目录 https://img.example.com/uploads/2024/05/hero_image.webp [^/]+?.(jpg|png|gif|webp)(?=?|$) hero_image.webp
    带多个参数 https://img.example.com/course.png?sign=abc123&time=1620000000 [^/]+?.(jpg|png|gif|webp)(?=?|$) course.png

    注:如果匹配结果是URL编码(比如cover_%E7%BE%8E%E9%A3%9F.jpg),可以用JavaScript的decodeURIComponent()或者Python的urllib.parse.unquote()转成中文——比如decodeURIComponent("cover_%E7%BE%8E%E9%A3%9F.jpg")会得到“cover_美食.jpg”,直接复制代码就能用!

    最后说个“偷懒技巧”:批量提取用代码(10分钟处理100张)

    要是你要处理几十上百张图片,手动复制链接到Regex101也麻烦——直接用代码批量提!我给你写了Python和JavaScript的“懒人代码”,复制就能用:

    Python版(适合批量处理)

    import re
    

    import urllib.parse

    def extract_image_name(url):

    # 正则模板(和之前一样)

    pattern = r'[^/]+?.(jpg|png|gif|webp)(?=?|$)'

    match = re.search(pattern, url)

    if match:

    # 解码URL编码(比如%20转空格,%E7%BE%8E%E9%A3%9F转美食)

    return urllib.parse.unquote(match.group())

    return "没找到图片名(可能链接格式不对)"

    测试批量链接

    urls = [

    "https://img.example.com/product.jpg?w=800",

    "https://img.example.com/cover_%E7%BE%8E%E9%A3%9F.jpg",

    "https://img.example.com/uploads/2024/05/hero_image.webp",

    "https://img.example.com/course.png?sign=abc123"

    ]

    for url in urls:

    print(f"链接:{url} → 图片名:{extract_image_name(url)}")

    JavaScript版(适合网页里用)

    function extractImageName(url) {
    

    const pattern = /[^/]+?.(jpg|png|gif|webp)(?=?|$)/;

    const match = url.match(pattern);

    if (match) {

    return decodeURIComponent(match[0]);

    }

    return "没找到图片名";

    }

    // 测试

    const url = "https://img.example.com/cover_%E7%BE%8E%E9%A3%9F.jpg?w=800";

    console.log(extractImageName(url)); // 输出:cover_美食.jpg

    上个月帮教育机构的运营处理课程封面图,他们用Python版批量提了500张图,运营小姐姐说:“这比找工具香10倍——工具还要上传链接,有时候还限速,代码直接本地跑,想提多少提多少!”

    你平时提取图片名有没有遇到过更奇葩的链接?比如带多个参数(像?a=1&b=2&c=3)、后缀是.svg或者.avif的?欢迎在评论区甩链接,我帮你改正则模板!要是你试了上面的方法,提对了图片名,也记得回来报个喜——让我看看谁是第一个“正则小能手”!


    正则表达式看起来好难,普通人真的能学会提取图片名吗?

    完全能!我去年帮朋友的美食博客处理图片时,他一开始也觉得正则是程序员的工具,结果我花10分钟教他用模板,他当天就把200张图片的文件名全提出来了。其实正则提取图片名不用记复杂公式,只要用我给的“万能模板”直接复制,再跟着步骤测一遍,就算第一次接触也能立刻上手。

    文章里的模板已经把“图片名的特征”(最后一个/后面、后缀 、?前面)翻译成了正则符号,你不用懂背后的原理,复制过去就能用——就像用“填空题模板”,把链接填进去就行。

    带参数的链接(比如?w=800)怎么用正则提取干净的图片名?

    带参数的链接是最常见的“坑”,但正则模板里早就帮你解决了!模板里的“(?=?|$)”就是“提前看一眼后面”——如果链接后面有?(比如?w=800),正则就会停在?前面,不会把参数算进图片名里。

    比如链接是https://img.example.com/product.jpg?w=800,用模板“[^/]+?.(jpg|png|gif|webp)(?=?|$)”匹配,结果就是product.jpg,刚好把参数切掉了——你不用手动删,正则自动帮你“精准定位”。

    提取出的图片名是URL编码(比如%E7%BE%8E%E9%A3%9F),怎么转成中文?

    URL编码是因为链接里不能有中文,得转成%开头的字符,不过转回来很简单!用JavaScript的decodeURIComponent()或者Python的urllib.parse.unquote()就行——比如把“cover_%E7%BE%8E%E9%A3%9F.jpg”复制进decodeURIComponent()里,直接就能得到“cover_美食.jpg”。

    我帮教育机构运营处理课程封面图时,他们就是用Python的urllib.parse.unquote()批量转的,500张图10分钟就转完了——复制代码粘到本地运行,不用一个个手动改。

    需要批量处理几十张图片,有没有偷懒的办法?

    当然有!用代码批量提取比手动快10倍!我给你写了Python和JavaScript的“懒人代码”,复制就能用——比如Python版的extract_image_name函数,把要处理的链接放进列表里,运行后直接输出所有图片名。

    上个月帮朋友处理200张美食图,他用Python代码跑了一遍,10分钟就搞定了,比找在线工具限速、收费强多了——代码本地跑,想提多少提多少,完全不用等。

    正则模板里的符号我看不懂,能用人话解释一下吗?

    没问题!模板“[^/]+?.(jpg|png|gif|webp)(?=?|$)”拆成“人话”就是:“从最后一个/开始,找一段不带/的字符,以.jpg/png/gif/webp 后面要么是?要么是链接结束”。

    再细拆:“[^/]”是不包含/(避免把目录算进去),“+?”是尽可能少匹配(不把参数算进去),“.(jpg|png|gif|webp)”是匹配图片后缀(.是真的“.”),“(?=?|$)”是看后面有没有?——这样组合起来,刚好抓住图片名的所有特征,不用你自己想规律。

    原文链接:https://www.mayiym.com/51999.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码