首页 > 正则提取img属性时的匹配排序问题

正则提取img属性时的匹配排序问题

有一个img标签

<img src="http://xxx/loading.gif" data-lazy-src="http://xx/xxx.jpg" />

使用js正则匹配时

/<img.*?(?:data-lazy-src|data-original|src)=['|"]([\s\S]*?)['|"].*?>/ig

会同时匹配上src和data-lazy..但是$1里的值始终是src里的属性..这时候应该怎么办?

'<img src="http://xxx/loading.gif" data-lazy-src="http://xx/xxx.jpg" />'
.replace(/<img.*?(?:data-lazy-src|data-original|src)=['|"]([\s\S]*?)['|"].*?>/ig, '{{$1}}')

//结果
"{{http://xxx/loading.gif}}"

去掉匹配规则里的src是可以的..不过因为通用提取所以src是必须在的.问题是怎么在匹配上data-lazy-src后忽略src获取的$1


可以试试{{$'}}了?$1是匹配第一个文本,所有就是src,而$'是匹配右侧的文本
可以看看replace方法的详细解读:JavaScript replace() 方法

刚才是我说错了,sorry,应该这个就可以了,评论看不清楚

'<img src="http://xxx/loading.gif" data-lazy-src="http://xx/xxx.jpg" />'
.replace(/<img.*?(?:src)=['|"]([\s\S]*?)['|"].*? .*?(?:data-lazy-src|data-original)=['|"]([\s\S]*?)['|"].*?>/ig, '{{$1}}')

这样的话$1就是src的值,$2就是data-lazy-src|data-original的值

【热门文章】
【热门文章】