JQuery регулярное выражение в нескольких строках - PullRequest
2 голосов
/ 08 апреля 2010

У меня есть следующая строка:

<img alt="over 40 world famous brandedWATCHES BRANDs to choose from
" src="http://www.fastblings.com/images/logo.jpg"></strong></a><br>

Я хочу определить шаблон регулярного выражения, например <img alt="(.+?)" src="http://(.+?).(jpg|gif)">, но, как вы можете видеть, целевая строка имеет разрыв строки в атрибуте alt - так как я могу включить это? правило должно быть похоже на «что-нибудь в атрибуте alt, включая разрывы строк».

1 Ответ

4 голосов
/ 08 апреля 2010

По умолчанию оператор подстановки . не соответствует символам новой строки (\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");
  ...
});
...