По умолчанию оператор подстановки .
не соответствует символам новой строки (\n
, \r
). В других языках есть режим DOTALL
(иногда называемый однострочным режимом), чтобы .
соответствовал чему-либо. У Javascript его нет по какой-то причине. Если вы хотите использовать эквивалентное значение [\s\S]
, что означает, что любой символ является пробелом или не пробелом, поэтому:
/<img alt="([\s\S]+?)" src="http:\/\/(.+?)\.(jpg|gif)">/
См. Многострочный флаг регулярных выражений Javascript не работает .
Также я избежал .
до jpg|gif
, иначе он будет соответствовать любому символу, а не .
, который вы намереваетесь.
При этом разбор HTML с помощью регулярных выражений - действительно плохая идея. Более того, если в вашем вопросе отсутствуют соответствующие детали, вы можете сделать это легко с помощью селекторов атрибутов jQuery :
$("img[src='http://.*\.gif|jpg']").each(function() {
var alt = $(this).attr("alt");
var src = $(this).attr("src");
...
});
Или, если вы хотите, чтобы был атрибут alt
:
$("img[alt][src='http://.*\.gif|jpg']").each(function() {
var alt = $(this).attr("alt");
var src = $(this).attr("src");
...
});