2012-04-17 15 views
1

引用属性の間に何かを持つalt属性を持たない画像タグを返す正規表現が必要です。たとえば、alt = ""またはalt = "y"のimgタグを返すことができます。正規表現でalt = "。#"を持たない<img />タグを見つける

画像タグに改行が含まれていて、1行に複数の画像タグが存在する可能性があります。

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

と、私はこの上でそれをテストしています:

現在、私が持っていることである

<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で作業しています。

+4

正規表現パーサではありません。 HTMLを扱うのには適していません。 –

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Joe

+0

これは正規表現でこれを行うことができない人を逆戻りさせるシナリオの1つですそうです。正規表現は入れ子になったタグを扱うことができないので、 ''は正規表現では解析できません。 Regexは、imgタグに他のimgタグが決して含まれないことを保証できる場合にのみ動作します。 –

答えて

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の情報 http://api.jquery.com/has-attribute-selector/

+0

LarryとDavidに感謝の意を表します。 – MNRSullivan

+0

私は現在、このjQueryソリューションを実装しようとしています。私はそれがページを読んでalt属性なしで各imgタグからソースコードを出力できるようにしたいと思います。どうすればいい? – MNRSullivan

+0

jQueryを試してみるとよいでしょう。どの部分に問題がありますか? $(str)はDOM要素のコレクションを返し、filter( 'not([alt])')フィルタはalt属性を持たない要素を返します。 –

2

これを行う代わりに、XPathを見てみるとよいでしょう。空のalt属性を持つ要素を探している場合は、.NETのXmlDocumentを使用してドキュメントを読み込み、ノードを選択するためにSelectNodes( "// img [@ alt = '']")を呼び出すことができます。

+0

ニースのDavid。しかし、XPathの代わりにjquery/cssセレクタを使用できるツールがいくつかありますか? – TMS

+0

以下のLarryのレスポンスはかなり良いようです。多分それが助けになるでしょう。適切な解決策の観点からは、オペレーションのニーズに依存すると思う。 –

+0

さて、デビット、私はOPがサーバーサイドのソリューションを望んでいると思っていましたが、セレクタソリューションがサーバーサイドにもできるのかどうか不思議です... – TMS

関連する問題