我有以下字符串:
<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属性中的任何内容,包括换行符”。
答案 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");
...
});