Регулярное выражение для youtube.com
Приветствую!
есть скрипт позволяющий пользователям форума (движок IPB 1.3) вставлять в посты ролики с youtube var r, html, result; var div = document.getElementsByTagName("div") for( i=0; i < div.length; i++ ) { if(div[i].className == 'postcolor') { if(div[i].innerHTML.indexOf("[youtube]")!=-1 && div[i].innerHTML.indexOf("[/youtube]")!=-1) { html = div[i].innerHTML; r = /\\[youtube\\]([0-9a-zA-Z\\-\\_]{11})\\[\\/youtube\\]/g result = html.replace(r, "<embed src='http://www.youtube.com/v/$1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='350'></embed>") div[i].innerHTML = result}}} НО работает скрипт только с окончаниями ссылок, если ссылка такая http://www.youtube.com/watch?v=gAnhjo25udo, то в теги пользователь вставляет окончание [youtube]gAnhjo25udo[/youtube] я хотел облегчить своим пользователям задачу и переделать скрипт для работы с целой ссылкой сначала подумал о методе slice() и извлекать из строки, то что идёт после v= , но ссылки могут быть видов: http://www.youtube.com/watch?v=gAnhjo25udo http://youtube.com/watch?v=gAnhjo25udo поэтому от этого метода отказался стал переписывать строку с регулярным выражением (в которых я практически ноль) перепробовал много вариантов, пока ничего путного вот к примеру один из вариантов (экранирование идёт двойным бэк-слэшем \\, поскольку при сохранении один из них съедается) Код:
r = /\\[youtube\\]\\http:\\/\\/|\\www\\.\\youtube.\\com\\/watch\\?\\v=([0-9 a-zA-Z\\-\\_]{11})\\[\\/youtube\\]/g [youtube]http://www.youtube.com/watch?v=gAnhjo25udo[/youtube] при сохранении поста получаю - www.youtube.com/watch?v=gAnhjo25udo[/youtube] т.е. [youtube]http:// как бы читается дальше никак (читается то, что до знака |, если его убрать, вообще ничего не читается, в посте будет просто [youtube]http://www.youtube.com/watch?v=gAnhjo25udo[/youtube] ) подскажите, что не так? или может быть вообще другой путь избрать? |
alert('[youtube]gAnhjo25udo[/youtube]'.replace(']', ']http://youtube.com/watch?v=')); |
r.slice( r.indexOf('v=')+2 )
|
может такой вариант сгодиться работает с
http://www.youtube.com/watch?v=gAnhjo25udo http://youtube.com/watch?v=gAnhjo25udo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <script language="JavaScript" type="text/javascript"> for(text="[youtube]http://youtube.com/watch?v=yl6j4xFvVdU[/youtube] [youtube]http://www.youtube.com/watch?v=ERAhCzkq3ds&feature=related[/youtube] [youtube]http://www.youtube.com/watch?v=sSgPDKG6bB0[/youtube]";text.search(/\[youtube\](.*?)\[\/youtube\]/g)>=0;){t=text.split("[youtube]");if(t[1]){t2=t[1].split("[/youtube]");if(t2[0]){var ss2009=t2[0].replace("watch?v=","v/");ss400='src="'+ss2009+'&hl=ru&fs=1"';text=text.replace("[youtube]"+t2[0]+"[/youtube]","<embed "+ss400+" type=application/x-shockwave-flash allowscriptaccess=always allowfullscreen=true width=280 height=245></embed>")}else text= text.replace("[youtube]"+t2[0]+"[/youtube]","")}}document.write(text); </script> </body> </html> |
Цитата:
|
Подобрал я всё таки регулярное выражение, которое работает с ссылками такого вида:
http://www.youtube.com/watch?v=gAnhjo25udo выражение получилось таким: r = /\\[youtube\\]http:\\/\\/www\\.youtube\\.com\\/watch\\?v=([0-9a-zA-Z\\-\\_]{11})\\[\\/youtube\\]/g теперь осталось добиться работы с ссылками вида: http://youtube.com/watch?v=5pvXkmlaiBk что посоветуете? |
Цитата:
я не вижу принципиальной разницы между этими двумя ссылками |
www\\. => (www\\.)?
|
доделал листинг в 4 посте сейчас можно кому интересно ролики с ютуба здесь посмотреть ))) работает с любыми ссылками с ютуба и с любым количеством тегов
|
задача решена,
всем спасибо за помощь, в итоге регулярное выражение получилось таким: r = /\\[youtube\\]http:\\/\\/(www\\.){0,1}youtube\\.com\\/watch\\?v=([^\\[]{11,110})\\[\\/youtube\\]/g result = html.replace(r, "<br><embed src='http://www.youtube.com/v/$2' type='application/x-shockwave-flash' wmode='transparent' width='425' height='350'></embed><br>") теперь все три разновидности ссылки читаются на ура http://youtube.com/watch?v=ERAhCzkq3ds http://www.youtube.com/watch?v=ERAhCzkq3ds http://www.youtube.com/watch?v=ERAhC...eature=related |
я решил продолжить работу с этим скриптом и сделать некое подобие универсального тега [video], чтоб работал с прямыми ссылками на популярные видеоресурсы,
в данный момент скрипт обрабатывает ссылки для : youtube.com rutube.ru vimeo.com dailymotion.com и smotri.com запнулся на vids.myspace.com вот собственно скрипт <script type="text/javascript"> var vide, html; var div = document.getElementsByTagName("div") for( i=0; i < div.length; i++ ) { if(div[i].className == 'postcolor') { if(div[i].innerHTML.indexOf("[video]")!=-1 && div[i].innerHTML.indexOf("[/video]")!=-1) { html = div[i].innerHTML; if (html.indexOf('smotri.com')) { vide = /\\[video\\]http:\\/\\/(.*?)\\/video\\/view\\/\\?id=(.*?)\\[\\/video\\]/g html = html.replace(vide, "<br><embed src='http://pics.$1/scrubber_custom8.swf?file=$2&bufferTime=3&autoStart=false&str_lang=rus&xmlsource=http://pics.$1/cskins/blue/skin_color_lightaqua.xml&xmldatasource=http://pics.$1/skin_ng.xml' quality='high' allowscriptaccess='always' allowfullscreen='true' wmode='opaque' width='400' height='300' type='application/x-shockwave-flash'></embed><br>") } if (html.indexOf('youtube.com')) { vide = /\\[video\\]http:\\/\\/(.*?)\\/watch\\?v=([^\\[]{11,110})\\[\\/video\\]/g html = html.replace(vide, "<br><embed src='http://$1/v/$2' type='application/x-shockwave-flash' wmode='transparent' allowfullscreen='true' allowscriptaccess='always' flashvars='fs=1&rel=0' width='425' height='350'></embed><br>") } if (html.indexOf('rutube.ru')) { vide = /\\[video\\]http:\\/\\/(.*?)\\/tracks\\/([^\\[]{1,20})\\.html\\?v=([^\\[]{11,50})\\[\\/video\\]/g html = html.replace(vide, "<br><embed src='http://video.$1/$3' type='application/x-shockwave-flash' wmode='transparent' width='425' height='350'></embed><br>") } if (html.indexOf('vimeo.com')) { vide = /\\[video\\]http:\\/\\/(.*?)\\/([^\\[]{1,10})\\[\\/video\\]/g html = html.replace(vide, "<br><embed src='http://$1/moogaloop.swf?clip_id=$2&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&fullscreen=1' type='application/x-shockwave-flash' wmode='transparent' allowfullscreen='true' allowscriptaccess='always' width='400' height='300'></embed><br>") } if (html.indexOf('dailymotion.com')) { vide = /\\[video\\]http:\\/\\/(.*?)\\/video\\/([^\\[]{6,110})\\[\\/video\\]/g html = html.replace(vide, "<br><embed src='http://$1/swf/video/$2' type='application/x-shockwave-flash' wmode='transparent' width='480' height='360' allowfullscreen='true'></embed><br>") } div[i].innerHTML = html}}} </script> для myspace.com сделать работу с цифровыми окончаниями от ссылки не проблема получается по той же схеме как с youtube в первом посте выглядит так: <script type="text/javascript"> var mys, html, result; var div = document.getElementsByTagName("div") for( i=0; i < div.length; i++ ) { if(div[i].className == 'postcolor') { if(div[i].innerHTML.indexOf("[myspace]")!=-1 && div[i].innerHTML.indexOf("[/myspace]")!=-1) { html = div[i].innerHTML; mys = /\\[myspace\\](.*?)\\[\\/myspace\\]/g result = html.replace(mys, "<br><embed src='http://mediaservices.myspace.com/services/media/embed.aspx/m=$1,t=1,mt=video,searchID=,primarycolor=,secondarycolor=' width='425' height='360' allowFullScreen='true' type='application/x-shockwave-flash' wmode='transparent'/></embed><br>") div[i].innerHTML = result}}} </script> но как только пытаюсь сделать работу с прямой ссылкой, (которые выглядят так http://vids.myspace.com/index.cfm?fu...id=10554 7198 http://vids.myspace.com/index.cfm?fu...id=10552 4453) начинается фигня вот регулярка Цитата:
где что упустил? (индексацию я потом прикручу, мне бы с прямыми ссылками разобраться) |
Часовой пояс GMT +3, время: 14:45. |