2012-02-23 32 views
0

我使用下面的代碼把一個YouTube和Vimeo的網址進入嵌入視頻:當URL結束時告訴jQuery?

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

}); 

如果他們自己能正常工作。然而,當它們被包裝在paragaph中時,它們將結束標記作爲url的一部分。

你可以明白我的意思在這個小提琴 - http://jsfiddle.net/xH7xK/

是否可以告訴代碼,其中一個網址就能完成 - 如果<或許結束,或者空格結束,或兩者兼而有之?

+0

如果沒有人回覆..可能會導致任何人正在觀看視頻 – 2012-02-23 07:22:12

+0

@roXon,除了我之外的每個人! – Justin 2012-02-23 07:31:42

回答

1

你可以改變你的正則表達式這個:

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。

更好的解決方案是隻匹配Youtube用作視頻ID的字母和數字,例如([a-zA-Z0-9] +),但我不記得在ID中允許使用哪些字符。

+0

感謝Oiva讓我走上正軌。對於Youtube我使用:([a-zA-Z0-9 \ - \ _] +)和Vimeo我使用:(\ d +)//似乎都工作。 – Justin 2012-02-23 08:11:24