JS / Jquery, Match не найдет совпадение PNG = ('/ gif | jpg | jpeg | png /') - PullRequest
2 голосов
/ 04 апреля 2010

У меня есть следующий код, который я использую для сопоставления возможных элементов 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 ]

10 голосов
/ 05 апреля 2010

Пара вещей.

Match принимает объект RegExp, а не строку. Это может работать в некоторых браузерах, но определенно не является стандартным.

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

без струн

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

Кроме того, вы можете проверить их в конце имени файла, а не где-нибудь в строке.

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

Поиск только в конце строки с суффиксом $ 1025 *

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

Нет необходимости вводить href в нижнем регистре, просто выполните поиск без учета регистра /i.

Ищите точку перед расширением изображения в качестве дополнительной проверки.

И некоторые тесты. Я не знаю, как вы получили какие-либо результаты при использовании строкового аргумента для .match. В каком браузере вы находитесь?

3 голосов
/ 05 апреля 2010

Полагаю, тот факт, что он будет совпадать в любом месте строки (например, "1001 *http://www.giftshop.com/"), может рассматриваться как ошибка. Я бы использовал

/\.(gif|jpe?g|png)$/i
0 голосов
/ 15 февраля 2015

Это прекрасно сработало для меня: /.+\.(gif|png|jpe?g)$/i

.+ -> любая строка

\. -> с последующей точкой.

(gif|png|jpe?g) -> и затем следует любое из этих расширений. jpeg может иметь или не иметь букву е.

$ -> теперь ожидается конец строки

/i -> режим без учета регистра: соответствует sflkj.JPG и lkjfsl.jpg

0 голосов
/ 06 апреля 2010

Вы передаете строку в функцию match (), а не в регулярное выражение. В JavaScript строки разделяются одинарными кавычками, а регулярные выражения - прямой косой чертой. Если вы используете оба, у вас есть строка, а не регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...