我需要一个正则表达式,它将返回一个没有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工作。
答案 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/