You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从指定URL提取dealetePosts与.jpg间的字符串?现有方案是否最优?

问题:从Cloudinary URL中提取指定片段

有如下格式的URL:

https://res.cloudinary.com/xyzzz/image/upload/v1673615977/dealetePosts/hokhqmcmmkveqhxtr0nb.jpg

如何从中提取hokhqmcmmkveqhxtr0nb?也就是提取dealetePosts和.jpg之间的内容。

用字符串定位加substring的方法可行,但有没有更简便的方式?我目前实现了如下可行的代码,但这是最优方案吗?

const publicID = dealPic.substring(
  dealPic.indexOf("dealetePosts/") + 13, 
  dealPic.lastIndexOf(".jpg")
);

几种更简便的实现方式
  • 正则表达式匹配:
    直接用正则精准捕获目标片段,代码简洁直观:

    const matchResult = dealPic.match(/dealetePosts\/(.*)\.jpg/);
    const publicID = matchResult ? matchResult[1] : '';
    

    原理:dealetePosts\/匹配固定前缀,(.*)捕获两者之间的所有内容,\.jpg匹配后缀,最终取捕获到的第一个分组结果即可。如果URL格式固定,这种方式最省心。

  • URL对象拆分路径:
    借助浏览器原生的URL对象解析路径,再通过分割路径片段来定位目标,适配性更强:

    const urlObj = new URL(dealPic);
    const pathParts = urlObj.pathname.split('/');
    const folderIndex = pathParts.indexOf('dealetePosts');
    const publicID = folderIndex !== -1 ? pathParts[folderIndex + 1].replace('.jpg', '') : '';
    

    这种方式不用硬编码字符串长度,哪怕后续路径层级微调,只要dealetePosts这个文件夹名不变,就能正常提取。

  • 对你当前代码的评价:
    你现在的代码完全能用,但存在两个小隐患:一是+13是硬写的dealetePosts/长度,万一这个文件夹名改了,代码直接失效;二是只针对.jpg后缀,如果后续出现其他图片格式,就得修改代码。如果你的业务场景里前缀和后缀永远不会变,当前方案没问题,但要追求健壮性的话,上面两种方式更优。

内容的提问来源于stack exchange,提问作者Kal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:11:13