Quero obter o v=id
URL do YouTube com JavaScript (sem jQuery, JavaScript puro).
Exemplos de formatos de URL do YouTube
http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW
http://www.youtube.com/watch?v=u8nQa1cJyX8
Ou qualquer outro formato do YouTube que contenha um ID de vídeo no URL.
Resultado desses formatos
u8nQa1cJyX8
javascript
regex
url
youtube
Adão
fonte
fonte
Respostas:
Você não precisa usar uma expressão regular para isso.
fonte
https://youtu.be/{{video_id}}
url='https://youtu.be/{{video_id}}'; url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
Fiz um aprimoramento no Regex fornecido por "jeffreypriebe", porque ele precisava de um tipo de URL do YouTube, que é o URL dos vídeos quando eles estão visualizando através de um canal.
Bem, não, mas esta é a função que eu armei.
Estes são os tipos de URLs suportados
Pode ser encontrado em [http://web.archive.org/web/20160926134334/] http://lasnv.net/foro/839/Javascript_parsear_URL_de_YouTube
fonte
/.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/
use emmatch[1]
vez dematch[7]
(o que me pareceu um pouco arbitrário). Também corrige o erro apontado pelo WebDev.Simplifiquei um pouco a resposta de Lasnv.
Também corrige o bug descrito pelo WebDeb.
Aqui está:
Aqui está um link regexer para jogar: http://regexr.com/3dnqv
fonte
Nenhum deles funcionou na pia da cozinha a partir de 1/1/2015, principalmente URLs sem http / se protocal e com domínio youtube-nocookie. Então, aqui está uma versão modificada que funciona em todas essas várias versões do Youtube:
fonte
^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]+).*
(ie youtube.com/watch?v= não irá corresponder)Testado em:
Inspirado por essa outra resposta .
fonte
Dado que o YouTube tem uma variedade de estilos de URL, acho que o Regex é uma solução melhor. Aqui está o meu Regex:
O grupo 3 tem seu ID do YouTube
Exemplos de URLs do YouTube (atualmente, incluindo "estilo de URL incorporado herdado") - o Regex acima funciona em todos eles:
Gorjeta de chapéu para Lasnv
fonte
"domain.com/embed/file.txt"
,"/tv/"
e"Has anyone seen my watch?"
. Veja: minha resposta a uma pergunta semelhante para uma solução muito mais precisa.Criei uma função que testa as entradas de usuários para o YouTube, o Soundcloud ou o Vimeo incorporam IDs, para poder criar um design mais contínuo com a mídia incorporada. Esta função detecta e retorna um objeto com duas propriedades: "type" e "id". O tipo pode ser "youtube", "vimeo" ou "soundcloud" e a propriedade "id" é o ID de mídia exclusivo.
No site, uso um despejo de área de texto, onde o usuário pode colar qualquer tipo de link ou código de incorporação, incluindo a incorporação por iFrame do vimeo e do youtube.
fonte
Tarde para o jogo aqui, mas juntei duas excelentes respostas de mantish e jw. Primeiro, o regex modificado:
Aqui está o código de teste (eu adicionei os casos de teste originais do mantish aos mais desagradáveis do jw):
Versão experimental para lidar com os URLs do m.youtube mencionados nos comentários:
Ele precisa
parsed[2]
ser alterado paraparsed[3]
em dois locais nos testes (que passam com osm.youtube
URLs adicionados aos testes). Deixe-me saber se você encontrar problemas.fonte
http://youtu.be/
se eu adicionar o/
que marca como válido. Utilizando-o em(value) => /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/.test(value)
tl; dr.
Corresponde a todos os exemplos de URL nesta questão e mais alguns.
O ID estará sempre no grupo de correspondência 7.
Exemplos ao vivo de todos os URLs que peguei nas respostas a esta pergunta: https://regexr.com/3u0d4
Explicação completa:
Como muitas respostas / comentários surgiram, existem muitos formatos para URLs de vídeo do youtube. Até vários TLDs em que eles podem parecer "hospedados".
Você pode ver a lista completa de variações contra as quais eu verifiquei, seguindo o link regexr acima.
Vamos quebrar o RegExp.
^
Bloqueie a string no início da string.(https?:\/\/)?
Protocolos opcionais http: // ou https: //?
Torna o item anterior opcional para ques
todo o grupo (qualquer coisa entre parênteses) entre parênteses seja opcional.Ok, esta próxima parte é a carne disso. Basicamente, temos duas opções, as várias versões do www.youtube.com/...[id] e o link abreviado youtu.be/[id].
Finalmente, temos o grupo para selecionar o ID do vídeo. Pelo menos um caractere que é um número, letra, sublinhado ou traço.
Você pode descobrir muito mais detalhes sobre cada parte da regex, encabeçando o link regexr e vendo como cada parte da expressão corresponde ao texto no URL.
fonte
A melhor solução (de 2019-2020) que encontrei é a seguinte:
Encontrei aqui .
fonte
Como os IDs de vídeo do YouTube estão definidos para 11 caracteres , podemos simplesmente logo
substring
após dividirmos o URLv=
. Então não somos dependentes do e comercial no final.Agradável e simples :)
fonte
Resumi todas as sugestões e aqui está a resposta universal e curta a esta pergunta:
fonte
Código Java: (Funciona para todos os URLs:
)
Para DailyMotion:
fonte
Versão ligeiramente mais rigorosa:
Testado em:
fonte
Você pode usar o código a seguir para obter o ID do vídeo do YouTube a partir de um URL:
fonte
Uma versão ligeiramente alterada da mantish postada:
Isso pressupõe que o código tenha sempre 11 caracteres. Estou usando isso no ActionScript, não tenho certeza se {11,11} é suportado em Javascript. Também foi adicionado suporte para & v = .... (apenas no caso)
fonte
Definitivamente, isso requer regex:
Copie para Ruby IRB:
Consulte para todos os casos de teste: https://gist.github.com/blairanderson/b264a15a8faaac9c6318
fonte
Mais um:
Funciona com qualquer URL mostrado neste tópico.
Não funcionará quando o YouTube adicionar outro parâmetro com 11 caracteres base64. Até então, é o caminho mais fácil.
fonte
Eu criei uma pequena função para extrair o ID do vídeo de um URL do Youtube, que pode ser visto abaixo.
Essa função extrairá o ID do vídeo, mesmo que haja vários parâmetros no URL.
fonte
Isso pode obter o ID do vídeo a partir de qualquer tipo de link do youtube
fonte
Gostei da resposta da Surya .. Apenas um caso em que não vai funcionar ...
não funciona para
versão atualizada:
funciona para todos.
fonte
Tente este -
fonte
O exemplo mais limpo de Chris Nolet da resposta Lasnv é muito bom, mas recentemente descobri que se você está tentando encontrar o link do youtube no texto e colocar algum texto aleatório após o URL do youtube, o regexp corresponde muito mais do que o necessário. Resposta melhorada de Chris Nolet:
fonte
Para teste:
fonte
Bem, a maneira de fazer isso com a análise simples seria: começar tudo depois do primeiro sinal = para o primeiro & sinal.
Eu acho que eles tiveram uma resposta semelhante aqui:
Analisando um ID do Vimeo usando JavaScript?
fonte
&
?Sabemos que esses caracteres "? V =" nunca podem aparecer mais que um, mas 'v' pode aparecer de alguma forma no próprio Id, então usamos "? V =" como delimitador. Veja trabalhando aqui
fonte
Regex simples, se você tiver o URL completo, mantenha-o simples.
fonte
espero que possa ajudar
fonte
Menor e eficiente
fonte
Como webstrap mencionado em um comentário :
fonte