使用正则表达式查找没有alt =&#34; {&#34;。#&#34;的<img/>标签。

时间:2012-04-17 19:10:43

标签: html regex expression-web

我需要一个正则表达式,它将返回一个没有alt属性的图像标记,该属性在引号之间有任何内容。例如,我希望它返回一个img标签,其中有alt =“”或没有alt,但没有alt =“y”。

图片代码中可能包含换行符,每行可能有多个图片代码。

目前,我所拥有的是:

<img.@(~[\r\n]|[\r\n])*.@(~(alt=".#"))*.@(~[\r\n]|[\r\n])*.@/>

我正在测试它:

<img alt="" />
<img src="xyz.jpg"
alt="y" />
<img xxxx ABC /> 
<img xxxxxx ABC />
<img src="xyz.jpg" alt="y" />

但是我的正则表达式会返回每个图像标记,包括我不想返回的第2和第5个图像标记。

我在Microsoft Expression Web工作。

2 个答案:

答案 0 :(得分:2)

您可能需要查看XPath而不是这样做。如果要查找具有空alt属性的元素,可以使用.NET中的XmlDocument加载文档,然后调用SelectNodes(“// img [@ alt ='']”)来选择节点。

答案 1 :(得分:1)

您最好的选择是使用jQuery将字符串解析为html节点,然后使用选择器从那里过滤它们。

var str = '<img alt="" /><img src="xyz.jpg" alt="y" /><img xxxx ABC /> <img xxxxxx ABC /><img src="xyz.jpg" alt="y" />';
var elementsWithoutAlt = $( str ).filter( 'not([alt])' );
console.log(elementsWithoutAlt.length);

'not([alt])'会找到没有alt属性的所有元素。 'img:not([alt])'会找到没有alt属性的所有'image'元素。

演示:(点击渲染以查看其动态) http://jsbin.com/imeyam/3/edit

jQuery Info http://api.jquery.com/has-attribute-selector/