Регулярное выражение для 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 |
Часовой пояс GMT +3, время: 00:55. |