2

我有以下代码用于匹配 fancybox 可能的元素:

$('a.grouped_elements').each(function(){
    var elem = $(this);
    // Convert everything to lower case to match smart
    if(elem.attr('href').toLowerCase().match('/gif|jpg|jpeg|png/') != null) {
        elem.fancybox();
    }
});

它适用于 JPG,但由于某种原因与 PNG 不匹配。有人看到代码的错误吗?谢谢

4

4 回答 4

11

有几件事。

Match 接受 的对象RegExp,而不是字符串。它可能适用于某些浏览器,但绝对不是标准的。

"gif".match('/gif|png|jpg/'); // null​​​​​​​​​​​​​​​​​​​​​​​​​​​​

没有弦

"gif".match(/gif|png|jpg/); // ["gif"]

此外,您可能希望在文件名的末尾检查这些,而不是在字符串中的任何位置。

"isthisagif.nope".match(/(gif|png|jpg|jpeg)/); // ["gif", "gif"]

仅在带有 $ 后缀的字符串末尾搜索

"isthisagif.nope".match(/(gif|png|jpg|jpeg)$/); // null

无需将 href 设为小写,只需进行不区分大小写的搜索即可/i

在图像扩展之前寻找一个点作为附加检查。

和一些测试。我不知道您如何使用字符串参数返回任何结果.match。你用的是什么浏览器?

于 2010-04-04T20:19:43.493 回答
3

我猜它会匹配字符串中的任何位置(例如匹配“ http://www.giftshop.com/ ”)这一事实可能被认为是一个错误。我会用

/\.(gif|jpe?g|png)$/i
于 2010-04-04T20:00:33.073 回答
0

您将字符串传递给 match() 函数,而不是正则表达式。在 JavaScript 中,字符串用单引号分隔,正则表达式用正斜杠分隔。如果您同时使用两者,则您有一个字符串,而不是正则表达式。

于 2010-04-06T09:47:32.423 回答
0

这对我来说非常有效:/.+\.(gif|png|jpe?g)$/i

.+-> 任何字符串

\.-> 后跟一个点。

(gif|png|jpe?g)->,然后是这些扩展中的任何一个。jpeg 可能有也可能没有字母 e。

$-> 现在是预期的字符串的结尾

/i-> 不区分大小写模式:同时匹配sflkj.JPGlkjfsl.jpg

于 2015-02-15T11:26:21.003 回答