2

我有以下字符串:

<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 属性中的任何内容,包括换行符”。

4

1 回答 1

4

默认情况下,.通配符运算符不匹配换行符 ( \n, \r)。在其他语言中,有一种DOTALL模式(有时称为单行模式)可以.匹配任何内容。Javascript由于某种原因没有它。如果您想要等效的 use [\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");
  ...
});
于 2010-04-07T23:57:50.790 回答