jQuery正则表达式多行

时间:2010-04-07 23:42:31

标签: jquery regex line-breaks

我有以下字符串:

<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 个答案:

答案 0 :(得分:4)

默认情况下,.通配符运算符匹配换行符(\n\r)。在其他语言中,有DOTALL模式(有时称为单行模式)使.匹配任何内容。由于某种原因,Javascript没有它。如果你想要等效使用[\s\S],这意味着任何字符都是空格或不是空格,所以:

/<img alt="([\s\S]+?)" src="http:\/\/(.+?)\.(jpg|gif)">/

请参阅Javascript regex multiline flag doesn’t work

此外,我在.之前逃过jpg|gif,否则它将匹配任何角色,而不是您想要的.

话虽这么说,用正则表达式解析HTML是一个非常糟糕的主意。更重要的是,除非您的问题中缺少相关详细信息,否则您可以使用jQuery attribute selectors轻松

$("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");
  ...
});