Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.06.2010, 15:55
Новичок на форуме
Отправить личное сообщение для Romych Посмотреть профиль Найти все сообщения от Romych
 
Регистрация: 20.02.2010
Сообщений: 6

Регулярное выражение для 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] )

подскажите, что не так?
или может быть вообще другой путь избрать?
Ответить с цитированием
  #2 (permalink)  
Старый 12.06.2010, 16:18
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

alert('[youtube]gAnhjo25udo[/youtube]'.replace(']', ']http://youtube.com/watch?v='));
Ответить с цитированием
  #3 (permalink)  
Старый 12.06.2010, 16:20
Аспирант
Отправить личное сообщение для haha Посмотреть профиль Найти все сообщения от haha
 
Регистрация: 02.08.2009
Сообщений: 40

r.slice( r.indexOf('v=')+2 )
Ответить с цитированием
  #4 (permalink)  
Старый 12.06.2010, 16:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

может такой вариант сгодиться работает с
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>

Последний раз редактировалось рони, 16.06.2010 в 05:26.
Ответить с цитированием
  #5 (permalink)  
Старый 12.06.2010, 19:28
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от haha
r.slice( r.indexOf('v=')+2 )
r.split('v=')[1]
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2010, 02:55
Новичок на форуме
Отправить личное сообщение для Romych Посмотреть профиль Найти все сообщения от Romych
 
Регистрация: 20.02.2010
Сообщений: 6

Подобрал я всё таки регулярное выражение, которое работает с ссылками такого вида:

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

что посоветуете?
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2010, 03:25
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Romych
что посоветуете?
выучить регулярные выражения
я не вижу принципиальной разницы между этими двумя ссылками
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2010, 03:39
Интересующийся
Отправить личное сообщение для qwoiejfoiej Посмотреть профиль Найти все сообщения от qwoiejfoiej
 
Регистрация: 02.06.2010
Сообщений: 21

www\\. => (www\\.)?
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2010, 05:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

доделал листинг в 4 посте сейчас можно кому интересно ролики с ютуба здесь посмотреть ))) работает с любыми ссылками с ютуба и с любым количеством тегов
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2010, 16:04
Новичок на форуме
Отправить личное сообщение для Romych Посмотреть профиль Найти все сообщения от Romych
 
Регистрация: 20.02.2010
Сообщений: 6

задача решена,
всем спасибо за помощь,
в итоге регулярное выражение получилось таким:

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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка e-mail регулярное выражение mycoding Общие вопросы Javascript 4 09.02.2017 10:12
Регулярное выражение для проверки URL Beck Events/DOM/Window 13 06.02.2011 08:01
Регулярное выражение jetli13 Общие вопросы Javascript 9 11.01.2010 21:40
Регулярное выражение для поиска смайлов. NightmareZ Общие вопросы Javascript 13 23.06.2009 13:12
регулярное выражение demi Общие вопросы Javascript 3 10.03.2009 13:10