否定前瞻匹配 sublime text 3 中的错误表达式

Negative look-ahead matches a wrong expression in sublime text 3

我尝试使用 Sublime Text 3 在 HTML 文件中找到没有 alt 属性的 <img> 标签。 我的表情:(<img)((\s)+(?!alt)[a-z]+=\"[^>]*\")*(\s*)(>).

但是 Sublime Text 无论如何都会找到具有 alt 属性的标签。为什么它不能按预期工作?什么是正确的方法?

<img class="d-block retina" src="images/header/mobile/slider-bg-2_1x.jpg" alt=""> - 找到了。 但是我想找到没有alt的东西。例如: <img class="d-block retina" src="images/header/mobile/slider-bg-2_1x.jpg">

为了拒绝任何包含 alt 命名键的 <img 标签,您可以将正则表达式简化为这样,

<img\s*(?:(?!\balt=).)*\s*>

解释:

  • <img - 匹配 <img 标签的开头
  • \s* - 允许可选的 space
  • (?:(?!\balt=).)* - 这部分一旦看到像这样的精确文字字符串就拒绝字符串 alt= 但如果它看到 alt 作为更大键名中的子字符串则允许像 aaaalt=altxyz=aaaaltbbb= 并捕获任何其他字符零次或多次
  • \s* - 在标签结束前再次允许可选的 space
  • > - 匹配标签结尾

Demo

让我知道这是否适合你。