Saya ingin mendapatkan v=id
dari URL YouTube dengan JavaScript (tanpa jQuery, JavaScript murni).
Contoh format URL YouTube
http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW
http://www.youtube.com/watch?v=u8nQa1cJyX8
Atau format YouTube lainnya yang berisi ID video di URL.
Hasil dari format ini
u8nQa1cJyX8
javascript
regex
url
youtube
Adam
sumber
sumber
Jawaban:
Anda tidak perlu menggunakan ekspresi reguler untuk ini.
sumber
https://youtu.be/{{video_id}}
url='https://youtu.be/{{video_id}}'; url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
Saya membuat peningkatan pada Regex yang disediakan oleh "jeffreypriebe" karena dia membutuhkan semacam URL YouTube adalah URL video ketika mereka melihat melalui saluran.
Ya tidak, tapi ini adalah fungsi yang saya miliki.
Ini adalah jenis URL yang didukung
Dapat ditemukan di [http://web.archive.org/web/20160926134334/] http://lasnv.net/foro/839/Javascript_parsear_URL_de_YouTube
sumber
/.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/
Kemudian gunakanmatch[1]
sebagai gantinyamatch[7]
(yang tampak agak sewenang-wenang bagi saya). Juga memperbaiki bug yang ditunjukkan oleh WebDev.Saya menyederhanakan jawaban Lasnv sedikit.
Itu juga memperbaiki bug yang dijelaskan WebDeb.
Ini dia:
Berikut ini adalah tautan regexer untuk bermain: http://regexr.com/3dnqv
sumber
Tak satu pun dari ini bekerja di wastafel dapur pada 1/1/2015, terutama URL tanpa http / s protokal dan dengan domain youtube-nocookie. Jadi, inilah versi modifikasi yang bekerja pada semua berbagai versi Youtube ini:
sumber
^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]+).*
(mis. Youtube.com/watch?v= tidak akan cocok)Diuji pada:
Terinspirasi oleh jawaban lain ini .
sumber
Mengingat YouTube memiliki beragam gaya URL, saya pikir Regex adalah solusi yang lebih baik. Ini Regex saya:
Grup 3 memiliki ID YouTube Anda
Contoh URL YouTube (saat ini, termasuk "legacy embed URL style") - Regex di atas berfungsi pada semuanya:
Tip hat ke Lasnv
sumber
"domain.com/embed/file.txt"
,"/tv/"
dan"Has anyone seen my watch?"
. Lihat: jawaban saya untuk pertanyaan serupa untuk solusi yang jauh lebih tepat.Saya membuat fungsi yang menguji input pengguna untuk Youtube, Soundcloud atau Vimeo embed ID's, untuk dapat membuat desain yang lebih berkelanjutan dengan media tertanam. Fungsi ini mendeteksi dan mengembalikan objek dengan dua properti: "type" dan "id". Jenis dapat berupa "youtube", "vimeo" atau "soundcloud" dan properti "id" adalah id media yang unik.
Di situs saya menggunakan dump textarea, di mana pengguna dapat menempelkan semua jenis tautan atau kode embed, termasuk embedded iFrame baik vimeo dan youtube.
sumber
Terlambat dalam permainan di sini, tapi aku telah menghimpun dua tanggapan yang sangat baik dari mantish dan jw. Pertama, regex yang dimodifikasi:
Ini kode tesnya (saya sudah menambahkan test case asli mantish ke jw's nastier):
Versi eksperimental untuk menangani url m.youtube yang disebutkan dalam komentar:
Itu perlu
parsed[2]
diubah menjadiparsed[3]
di dua tempat dalam tes (yang kemudian diteruskan denganm.youtube
url ditambahkan ke tes). Beri tahu saya jika Anda melihat masalah.sumber
http://youtu.be/
jika saya menambahkannya/
menandakannya valid. Menggunakannya di(value) => /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/.test(value)
tl; dr.
Cocokkan semua contoh URL pada pertanyaan ini dan kemudian beberapa.
ID akan selalu ada di grup pertandingan 7.
Contoh langsung dari semua URL yang saya ambil dari jawaban atas pertanyaan ini: https://regexr.com/3u0d4
Penjelasan lengkap:
Karena banyak jawaban / komentar telah muncul, ada banyak format untuk URL video youtube. Bahkan beberapa TLD di mana mereka dapat "dihosting".
Anda dapat melihat daftar variasi lengkap yang saya periksa dengan mengikuti tautan regexr di atas.
Mari kita hancurkan RegExp.
^
Kunci string ke awal string.(https?:\/\/)?
Protokol opsional http: // atau https: //?
Membuat item sebelumnya opsional sehinggas
dan kemudian seluruh grup (apa pun yang terlampir dalam seperangkat tanda kurung) adalah opsional.Ok, bagian selanjutnya ini adalah dagingnya. Pada dasarnya kami memiliki dua opsi, berbagai versi www.youtube.com/...[id] dan tautan yang disingkat menjadi versi youtu.be/[id].
Akhirnya kami memiliki grup untuk memilih ID video. Setidaknya satu karakter yang berupa angka, huruf, garis bawah, atau tanda hubung.
Anda dapat menemukan lebih banyak detail tentang setiap bagian dari regex dengan menuju tautan regexr dan melihat bagaimana setiap bagian dari ekspresi cocok dengan teks di url.
sumber
Solusi terbaik (dari 2019-2020) yang saya temukan adalah:
Saya menemukannya di sini .
sumber
Karena id video YouTube ditetapkan menjadi 11 karakter , kami dapat dengan mudah
substring
setelah kami membagi url denganv=
. Maka kita tidak bergantung pada ampersand pada akhirnya.Bagus dan sederhana :)
sumber
Saya telah merangkum semua saran dan inilah jawaban universal dan singkat untuk pertanyaan ini:
sumber
Kode Java: (Berfungsi untuk semua URL:
)
Untuk DailyMotion:
sumber
Versi yang sedikit lebih ketat:
Diuji pada:
sumber
Anda dapat menggunakan kode berikut untuk mendapatkan ID video YouTube dari URL:
sumber
Versi yang sedikit berubah dari yang ditulis:
Ini mengasumsikan kode selalu 11 karakter. Saya menggunakan ini dalam ActionScript, tidak yakin apakah {11,11} didukung dalam Javascript. Juga menambahkan dukungan untuk & v = .... (untuk berjaga-jaga)
sumber
Ini jelas membutuhkan regex:
Salin ke Ruby IRB:
Lihat untuk semua kasus uji: https://gist.github.com/blairanderson/b264a15a8faaac9c6318
sumber
Satu lagi:
Ini berfungsi dengan URL apa pun yang ditampilkan di utas ini.
Ini tidak akan berfungsi ketika YouTube menambahkan beberapa parameter lain dengan 11 karakter base64. Sampai saat itu adalah cara yang mudah.
sumber
Saya membuat fungsi kecil untuk mengekstrak id video dari url Youtube yang dapat dilihat di bawah ini.
Fungsi ini akan mengekstrak id video bahkan jika ada beberapa parameter dalam url.
sumber
Ini bisa mendapatkan id video dari semua jenis tautan youtube
sumber
Saya menyukai jawaban Surya .. Hanya kasus di mana itu tidak akan berhasil ...
tidak bekerja untuk
versi terbaru:
bekerja untuk semua.
sumber
Coba yang ini -
sumber
Chris Nolet contoh bersih jawaban Lasnv sangat baik, tetapi saya baru-baru ini menemukan bahwa jika Anda mencoba untuk menemukan tautan youtube Anda dalam teks dan meletakkan beberapa teks acak setelah url youtube, regexp cocok dengan cara yang lebih dari yang dibutuhkan. Jawaban Chris Nolet yang ditingkatkan:
sumber
Untuk pengujian:
sumber
Nah, cara melakukannya dengan penguraian sederhana adalah: dapatkan semuanya dimulai setelah yang pertama = masuk ke yang pertama & masuk.
Saya pikir mereka punya jawaban yang serupa di sini:
Mem-parsing Vimeo ID menggunakan JavaScript?
sumber
&
?Kita tahu karakter-karakter ini "? V =" tidak pernah dapat muncul lebih dari yang tetapi 'v' dapat muncul entah bagaimana di Id itu sendiri sehingga kami menggunakan "? V =" sebagai pembatas. Lihat Bekerja di Sini
sumber
Regex sederhana jika Anda memiliki URL lengkap, tetap sederhana.
sumber
semoga bisa membantu
sumber
Terpendek dan Efisien
sumber
Seperti webstrap yang disebutkan dalam komentar :
sumber