使用正则表达式查找不带 alt 属性的 img 标签
我正在浏览一个大型网站(1600 多个页面)以使其通过优先级 1 W3C WAI。因此,像图像标签之类的东西需要具有 alt 属性。
查找没有 alt 属性的 img 标签的正则表达式是什么?如果可能的话,请提供一个简短的解释,以便我可以用来查找其他问题。
我在一间办公室里,使用 Visual Web Developer 2008。编辑 >>查找对话可以使用正则表达式。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
以 Mr.Black 和 Roberts126 的答案为基础:
这将匹配代码中任何位置的 img 标签,该标签要么没有 alt 标签,要么 alt 标签后面没有 ="" 或 ='' (即无效的 alt 标签)。
分解:
如果您的代码编辑器允许通过正则表达式进行搜索和替换,您可以将其与替换字符串结合使用:
查找任何无 alt 的 img 标签并在其后附加一个空的 alt 标签。当对 HTML 电子邮件等使用间隔符或其他布局图像时,这非常有用。
Building on Mr.Black and Roberts126 answers:
This will match an img tag anywhere in the code which either has no alt tag or an alt tag which is not followed by ="" or ='' (i.e. invalid alt tags).
Breaking it down:
If your code editor allows search and replace by Regex you can use this in combination with the replace string:
To find any alt-less img tags and append them with an empty alt tag. This is useful when using spacers or other layout images for HTML emails and the like.
以下是我刚刚在自己的环境中尝试使用的大型企业代码库,并取得了一些成功(没有发现误报,但确实找到了有效的案例):
此搜索中发生了什么:
所以这将匹配:
但它不会匹配以下任何一个:
Here is what I just tried in my own environment with a massive enterprise code base with some good success (found no false positives but definitely found valid cases):
What's going on in this search:
So this will match:
But it won't match either of these:
这在 Eclipse 中有效:
我也在更新第 508 节!
This works in Eclipse:
<img(?!.*alt).*?>
I'm updating for Section 508 too!
这对我有用。
这与以
开头且 alt 属性之前不包含任何数量的字符的任何字符串匹配。它甚至适用于
src=""
类型的属性。This worked for me.
This matches any string beginning with
<img
that doesn't contain any number of characters before an alt attribute. It even works forsrc="<?php echo $imagename; ?>"
type of attributes.通过以下正则表达式,这是完全可能的:
寻找不存在的东西是相当棘手的,但我们可以通过寻找不以“a”开头的组或不以“a”开头的组来欺骗他们。后面不要跟“l”等。
This is perfectly possible with following regEx:
Looking for something that isn't there, is rather tricky, but we can trick them back, by looking for a group that doesn't start with 'a', or an 'a' that doesn't get followed by an 'l' and so on.
这确实很棘手,因为正则表达式主要是为了匹配现有的东西。通过环顾四周的技巧,你可以做一些事情,比如“找到 A 前面/后面没有 B”等。但我认为对你来说最务实的解决方案不是这样。
我的建议有点依赖于您现有的代码不要做太疯狂的事情,您可能需要对其进行微调,但我认为如果您真的想使用正则表达式搜索来解决您的问题,这是一个很好的选择。
因此,我建议找到所有 img 标签,这些标签可以(但不需要)具有 img 元素的所有有效属性。这是否是您可以使用的方法由您决定。
建议:
当前的限制是:
This is really tricky, because regular expressions are mostly about matching something that is there. With look-around trickery, you can do things like 'find A that is not preceded/followed by B', etc. But I think the most pragmatic solution for you wouldn't be that.
My proposal relies a little bit on your existing code not doing too crazy things, and you might have to fine-tune it, but I think it's a good shot, if you really want to use a RegEx-search for your problem.
So what I suggest would be to find all img tags, that can (but don't need to) have all valid attributes for an img-element. Whether that is an approach you can work with is for you to decide.
Proposal:
The current limitations are:
简单有效:
此正则表达式适用于查找缺少
alt< 的
标签/代码> 属性。
Simple and effective:
<img((?!\salt=).)*?
This regex works for find
<img>
tags missing thealt
attribute.我为此编写了一个简单的代码,没有正则表达式
I wrote a simple code for this without Regex
))*?alt)
这个在 vscode 中对我有用。它将突出显示所有不带 alt 属性的 img 标签的开头
<img(?!(\n|.(?!\/>))*?alt)
This one works for me in vscode. It will highlight the beginning of all the img tags without an alt attribute