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

如何用JavaScript正则提取div外文本与img的src属性值

问题:提取div标签外文本与img标签的src属性值组成数组

我有如下格式的字符串:

'fdffddf<div><br> <div><img style="max-width: 7rem;" src="folder/myimg.jpg"><div> <br></div></div><div><div> <br></div></div></div>'

我希望编写正则表达式,提取div标签外的文本以及img标签的src内容,组成数组。比如这个场景下预期结果为:

[ 'fdffddf', 'folder/myimg.jpg' ]

我尝试了以下方法:

let str = 'fdffddf<div><br> <div><img style="max-width: 7rem;" src="folder/myimg.jpg"><div> <br></div></div><div><div> <br></div></div></div>'
console.log('only content without div tag and src image only without img tag : ',str.match(/<img [^>]*src="[^"]*"[^>]*>/gm)[0]) 

但这个方法无效,只能获取到img标签本身,请问该如何实现需求?


解决方案

可以通过两次匹配或者一个正则匹配两种目标内容来实现,以下是两种可行方案:

方案一:分别提取后合并数组

  1. 提取div标签外的文本:匹配<div>之前的所有非标签文本
  2. 提取img的src属性值:通过捕获组精准提取src引号内的内容

代码示例:

const str = 'fdffddf<div><br> <div><img style="max-width: 7rem;" src="folder/myimg.jpg"><div> <br></div></div><div><div> <br></div></div></div>';

// 提取div外的前置文本
const outsideText = str.match(/^[^<]+/)?.[0] || '';

// 提取img的src值,捕获组获取引号内内容
const imgSrc = str.match(/<img[^>]+src="([^"]+)"/)?.[1] || '';

// 组装结果数组并过滤空值
const result = [outsideText, imgSrc].filter(item => item);
console.log(result); // 输出: [ 'fdffddf', 'folder/myimg.jpg' ]

方案二:单正则匹配两种目标内容

使用正则的交替模式,同时匹配div外的前置文本和img的src值:

const str = 'fdffddf<div><br> <div><img style="max-width: 7rem;" src="folder/myimg.jpg"><div> <br></div></div><div><div> <br></div></div></div>';

// 正则同时匹配两种情况:^[^<]+ 是div前的文本;(?<=src=")[^"]+ 是src引号内的内容
const matches = str.match(/^[^<]+|(?<=src=")[^"]+/g) || [];
console.log(matches); // 输出: [ 'fdffddf', 'folder/myimg.jpg' ]

正则说明:

  • ^[^<]+:匹配字符串开头到第一个<的内容,即div标签外的前置文本
  • (?<=src=")[^"]+:正向零宽断言,匹配src="之后到下一个"之间的内容,精准提取src属性值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:00:57