Скажите jQuery, когда URL закончился? - PullRequest
0 голосов
/ 23 февраля 2012

Я использую следующий код, чтобы превратить URL-адреса YouTube и Vimeo во встраиваемые:

 $('.media-supported li, .blog-post').html(function(i, html) {

    return html.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, '<div class="media-item"><iframe width="940" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></div>');

});
$('.media-supported li, .blog-post').html(function(i, html) {

    return html.replace(/(?:http:\/\/)?(?:www\.)?(?:vimeo\.com)\/(?:clip\?v=)?(.+)/g, '<div class="media-item"><iframe src="http://player.vimeo.com/video/$1?title=0&byline=0&portrait=0" width="940" frameborder="0"></iframe></div>');

});

Если они сами по себе, они работают нормально.Однако, когда они заключены в парагаф, они принимают закрывающий тег как часть URL.

Вы можете видеть, что я имею в виду в этой скрипке - http://jsfiddle.net/xH7xK/

Можно ли сказать кодгде URL закончится - возможно, завершится, если <или закончится, если пробел, или оба? </p>

1 Ответ

1 голос
/ 23 февраля 2012

Вы можете изменить свое регулярное выражение на это:

html.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([^<\s]+)/g, '<div class="media-item"><iframe width="940" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></div>'));

На этом URL заканчивается <или пробелом. </p>

Лучшим решением было бы сопоставить только буквы и цифры, которые Youtube использует в качестве идентификаторов видео, что-то вроде ([a-zA-Z0-9] +), но я не могу вспомнить, какие символы разрешены в идентификаторе.

...