Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регулярки: замена ссылки на ютуб (https://javascript.ru/forum/misc/30183-regulyarki-zamena-ssylki-na-yutub.html)

Hekumok 27.07.2012 01:06

регулярки: замена ссылки на ютуб
 
Гулял по форуму в поисках примеров регулярных выражений и наткнулся на один пост от maxmaxmaximus-а (выкинул из его поста всё лишнее оставил саму задачу)
Цитата:

Сообщение от Mахmaxmaximus (Сообщение 159585)
потом напиши функцию чтобы она находила в тексте все такие ссылки на ютьюб, и заменяла их чисто айдишниками ютьюбовских видео.

Я сделал это так:
<div id="text" style="height: 50px">&nbsp;</div>
<script>
var str = "http://youtube.com бла-бла-бла youtu.be/wUQfvbBRnZs бла-бла-бла http://www.youtube.com/watch?v=wUQfvbBRnZs http://youtu.be" ;
var poisk = /((?:http:\/\/)?(?:www\.)?youtube\.com\/watch\?v=(?=[-_0-9a-z]{11}))|((?:http:\/\/)?(?:www\.)?youtu\.be\/(?=[-_0-9a-z]{11}))/ig ;
var pat = str.replace(poisk, '') ;
window.onload = function() {
document.getElementById('text').innerHTML = pat ;
} ;
</script>

Не 'коряво' я это реализовал? Можно это сделать короче или нет

oneguy 27.07.2012 01:28

Во-первых, в регулярке вы забыли закрыть скобку, во-вторых, флаг "m" там не нужен. Вместо (?=[%0-9a-z]+\b) можно просто (?=[%0-9a-z]), что не равносильно, но, мне кажется, то что вы хотели.

Hekumok 27.07.2012 01:29

oneguy,
я уже сам увидел и исправил =) или где-то еще забыл?
m - да пох на него))
а если сделать как вы написали, то там будет смотреть только один знак после youtube.com/, а я сделал наверняка, чтоб просматривал все, но в принципе, канеш, можно и так =)

oneguy 27.07.2012 01:36

Цитата:

Сообщение от Hekumok
а если сделать как вы написали, то там будет смотреть только один знак после youtube.com/

В вашем варианте тоже, вы написали [%0-9a-z]+ - значит оно будет довольно даже одним знаком.

Hekumok 27.07.2012 01:48

oneguy, ну в принципе да :)

Hekumok 27.07.2012 09:17

Дзен-трансгуманист, спасибо, поправлю код =) но у меня, когда я вбил в гугле 'видео ютуб', были именно те 2 ссылки...без 'watch' и идентификатор не из 11символов почему-то...хотя, может, это и не идентификатор
__________
Всё исправил, теперь норм?
__________
И если всё правильно, поставьте мне какую-нить задачку с регулярками, если вам не сложно =)

Hekumok 27.07.2012 16:28

кто-нибудь может дать какую-нить задачку с регулярками или ссылку, где задачу(-и) можно посмотреть, но не слишком сложную, еси можна

Deff 27.07.2012 19:09

Hekumok,
А приведите пару-тройку входных строк и пару выходных для них же ?
Чот пока слабо вкурил

Hekumok 27.07.2012 20:00

Deff,
<div id="text" style="height: 50px">&nbsp;</div>
<script>
var str = "новый видос погляди : \n\n полный вид ссылки : http://www.youtube.com/watch?v=y-Q49kLd7EA \n без протокола : www.youtube.com/watch?v=y-Q49kLd7EA \n без www : youtube.com/watch?v=y-Q49kLd7EA \n с двумя слешами : //youtube.com/watch?v=y-Q49kLd7EA \n параметр ИД не первый : youtube.com/watch?feature=relmfu&v=y-Q49kLd7EA \n короткий вид ссылки : youtu.be/y-Q49kLd7EA \n ссылки с мусором : youtube.com/watch?v=y-Q49kLd7EA&feauture=youtu.be \n youtube.com/watch?v=y-Q49kLd7EA#t=5s \n ссылка с верхним регистром : YOUTUBE.COM/WATCH?V=Y-Q49KLD7EA" ;
var poisk = /(?:(?:http:)?(?:\/\/)?(?:www\.)?youtube\.com\/watch\?\S*?v=([-_0-9a-z]{11})\S*)|(?:(?:http:)?(?:\/\/)?(?:www\.)?youtu\.be\/\S*?([-_0-9a-z]{11})\S*)/ig ;
var pat = str.replace(poisk, function(а, b, c) {return (b||c)}) ;
window.onload = function() {
document.getElementById('text').innerHTML = pat ;
} ;
</script>

ещё? :)

Deff 27.07.2012 21:21

Hekumok,
Ясн!


Часовой пояс GMT +3, время: 11:56.