js获取html中的img标签,图片标签,提取src属性并替换操作

场景:

获取HTML中的所有图片标签,并把图片的src属性替换成webp图片, 若浏览器支持webp,则展示,不支持走onerror函数展示data-original原图。

复制代码
function getDetailWebp(htmlStr, width= 600){
      if(!htmlStr) return '';
      var reg = /<img[^>]+src=[\'|\"]?([^(?"|?'|?>)]+)[\'|\"]?[^>]*>/gi;
      if(!reg.test(htmlStr)) return htmlStr; // 内容中无图直接返回不用处理
      return htmlStr.replace(reg, function($0, $1){
          if($0.indexOf('data-original') != -1) return $0;  // 如果图片标签上有这个属性,那这个可能是接口或者自己已经处理过的不需要重复处理,返回即可;
          return $0.replace($1, imageToWebp($1, width)).replace(/\/?>/, ` data-original="${$1}" onerror="loadImageError(this)"/>`)
      })
    }

图片正则:

复制代码
var imgReg = /<img[^>]+>/gi; 
var imgAndSrcReg = /<img[^>]+src=[\'|\"]?([^(?"|?'|?>)]+)[\'|\"]?[^>]*>/gi; 
  1. <img 匹配图片标签;
  2. \^\>+ 匹配不是>的任意字符,+ 1到多
  3. src='\|"?(\^(?"\|?'\|?\>)+)'\|"?匹配src属性,'\|"? 属性用单引号或者双引号包起来的,可包可不包(可有可无);其中(\^(?"\|?'\|?\>)+)最里层的(?"|?'|?>)非"非'非>,整个就是src中的属性值为非"或非'或非>的任意字符;
  4. \^\>* 不是>的任意字符,*代表0到多;
相关推荐
恋猫de小郭12 小时前
Flutter 状态管理基准测评,一个很有趣的观点
android·前端·flutter
雪芽蓝域zzs12 小时前
前端编辑组件wangEditor
前端
风骏时光牛马12 小时前
稳定性治理及疑难问题深度剖析与实战复盘
前端
JeffongTan21 小时前
在LWC中镶嵌VF Page获取用户IP
前端·javascript·salesforce
不cong明的亚子1 天前
web live多屏互动平台
javascript·经验分享·音视频
陆枫Larry1 天前
Astro 是什么
前端
是立不是利1 天前
写给设计师的 CSS 博客美学指南
前端·css
dsyyyyy11011 天前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript
默_笙1 天前
🏝 Docker 就是"房地产开发":从施工图纸到小区物业的容器化指南
前端·javascript
计算机魔术师1 天前
Rohan Paul 谈用时间跨度衡量智能体能力,并引用 OpenAI 自动化研究实习生里程碑
前端