2012-04-17 2 views
1

Мне нужно регулярное выражение, которое вернет тег изображения, который не имеет атрибута alt, который имеет что-либо между кавычками. Например, я бы хотел, чтобы он возвращал тег img, который имеет alt = "" или который не имеет alt, но не тот, который имеет alt = "y".Регулярное выражение для поиска <img /> тег, который не имеет alt = ". #"

Теги изображений могут иметь разрывы строк в них, и в строке может быть более одного тега изображения.

В настоящее время, то, что у меня есть:

<[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

Это один из сценариев, когда люди, срывающие вас, не могут делать это с помощью регулярного выражения являются правильными. регулярные выражения не могут иметь дело с вложенными тегами, поэтому такие вещи, как «', не являются доступными с регулярным выражением. 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.

Demo: (Нажмите воздавать увидеть его в действии) http://jsbin.com/imeyam/3/edit

JQuery Информация http://api.jquery.com/has-attribute-selector/

+0

Спасибо Ларри и Дэвиду за предложения. – MNRSullivan

+0

В настоящее время я пытаюсь реализовать это решение jQuery. Я хотел бы, чтобы он мог читать страницу и выводить исходный код из каждого тега img без атрибута alt.Как я мог это сделать? – MNRSullivan

+0

Вы должны поэкспериментировать с jQuery, чтобы вы могли лучше понять его. С какой частью у вас проблемы? $ (str) возвращает коллекцию элементов DOM и фильтра (фильтры 'not ([alt])') возвращают элементы, у которых нет атрибута alt. –

2

Возможно, вы захотите взглянуть на XPath, чтобы сделать это. Если вы ищете элементы с пустыми атрибутами alt, вы можете загрузить документ с помощью XmlDocument в .NET, а затем вызвать SelectNodes ("// img [@ alt = '']") для выбора узлов.

+0

Nice David. Но есть ли какой-нибудь инструмент, который позволит использовать селектора jquery/css вместо XPath? – TMS

+0

Ответ Ларри ниже выглядит довольно неплохо. Может быть, это поможет. Что касается правильного решения, я думаю, что это будет зависеть от того, что нужно оператору. –

+0

Ну, Дэвид, я думал, что OP захочет серверное решение, как и ваше, и мне любопытно, может ли решение селектора быть также серверным ... – TMS

 Смежные вопросы

  • Нет связанных вопросов^_^