正则表达式 - 如何从图像中获取 src 和 alt

Regex - How to get src and alt from Image

提问人:Jessika 提问时间:10/21/2022 最后编辑:Andy LesterJessika 更新时间:10/21/2022 访问量:512

问:

我需要从所有图像中获取 html 代码的 src 和 alt。我设法得到了它,但我有以下问题:

  • 如果图像没有alt,则它不会检测到我的图像。在这些情况下,我只需要获取 src。

以下代码适用于以下问题:https://regex101.com/r/3Vlkql/1

(<img\s)[^>]*(src=\S+)[^>]*(\salt=["|'].*?["|'])[^>]*(\/?>)

替代:

$1$2$3$4

结果:

<img src="https://example.com/image" alt="example1">

问题:我的正则表达式只检测是否具有 src 和 alt。但是如果没有alt,正则表达式不会检测到我。我怎样才能用正则表达式来获得两者?

这与正则表达式不匹配:

<img src="https://example.com/image">
  • src 和 alt
  • 仅 src

如果我需要使用 2 个正则表达式来实现我的目的,我没有问题。

正则表达式 HTML 解析

评论

0赞 Andy Lester 10/21/2022
不要使用正则表达式来解析 HTML。使用适当的 HTML 解析模块。你无法可靠地使用正则表达式解析 HTML,并且你将面临悲伤和沮丧。一旦 HTML 从您的期望中改变,您的代码就会被破坏。请参阅 htmlparsing.com/php此 SO 线程,了解如何使用已经编写、测试和调试的 PHP 模块正确解析 HTML 的示例。
0赞 Jessika 10/21/2022
这个正则表达式:<img(?![^>]*\balt=)[^>]*?> 匹配没有 alt 的图像,但是我怎样才能分组以获得 <img src=“domain.com/image”> 仅适用于不包含 alt 的图像 –
2赞 Andy Lester 10/21/2022
你开始发现为什么你不想用正则表达式解析 HTML。
0赞 bobble bubble 10/21/2022
你看过正则表达式101中的步数计数器吗?这种模式看起来已经很费力了。如果是之前呢?使用正则表达式执行此操作将很复杂且难以维护,此外它不能用于任何任意 html。altsrc

答:

0赞 Mohamad Ahmadi 10/21/2022 #1

您可以在组末尾用于可选的组模式:?

它的工作很好:/(<img\s)[^>]*(src=\S+)[^>]*(\salt=["|'].*?["|'])?[^>]*(\/?>)/gm

在这里,您可以查看演示的实时链接:https://regex101.com/r/u2uWGX/1

enter image description here

enter image description here

评论

0赞 Jessika 10/21/2022
但不适用于: <img class=“aligncenter wp-image-15664” src=“example.com” srcset=“example.com” sizes=“(max-width: 557px) 100vw, 557px” width=“557” height=“314” _mstalt=“1316237”>
0赞 Jessika 10/21/2022
<img(?![^>]*\balt=)[^>]*?> 匹配没有 alt 的图像,但是我怎样才能分组以获得 <img src=“domain.com/image”> 仅适用于不包含 alt 的图像
0赞 Mohamad Ahmadi 10/21/2022
它的工作也!看图片<img class="aligncenter wp-image-15664" src="example.com" srcset="example.com" sizes="(max-width: 557px) 100vw, 557px" width="557" height="314">
0赞 Mohamad Ahmadi 10/21/2022
使用这个/(<img\s)[^>]*(src=\S+)[^>]*(\salt=["|'].*?["|'])?[^>]*(\/?>)/gm
0赞 Jessika 10/21/2022
你能检查一下为什么不工作吗?regex101.com/r/qeNPvz/1
0赞 Rohìt Jíndal 10/21/2022 #2

如果您的 HTML 中有一组元素。您还可以通过循环 .imgsrcaltHTMLCollection

演示

const imgCollection = document.getElementsByTagName('img');

for (let item of imgCollection) {
  console.log('src :', item.src)
  console.log('alt :', item.alt)
}
<img src="https://example.com/image" alt="example1">
<img src="https://example.com/image">