đánh vật với YoutubeID

Đánh Hugo site, gặp vande khi muốn nhặt riêng Youtube ID ra khỏi link. Cái này cần replaceRE function để lọc ketqua bằng regex.

Trước jờ copy link youtube chỉ thấy mấy mẫu fobien, đâu ra nhiều như liệt kê của bọn tay chuyên nhẻ?

1
2
3
https://www.youtube.com/watch?v=TBmJj5JhArU
https://youtu.be/TBmJj5JhArU
https://youtu.be/TBmJj5JhArU?t=5

Zày vò Regex101 với đống guideline của nó mãi không ra ketqua như ý. Đành từ bỏ ý định DIY. 😄

Mò mẫm trên mạng với các keyword lienquan. Thử mấy lượt với Regex101 mới thấy một cái có vẻ zùng được.

Regex101, chạy thử ok. Cuối cùng cũng tóm được Youtube ID trong 3 cái sample đã cho.
Regex101, chạy thử ok. Cuối cùng cũng tóm được Youtube ID trong 3 cái sample đã cho.

Code zài lòng thòng, nom nguyhiem vaidai. Chả hiểu mẹ jisat, nhưng cứ copy về lưu đây cái đã.

1
^https?\:\/\/(?:www\.youtube(?:\-nocookie)?\.com\/|m\.youtube\.com\/|youtube\.com\/)?(?:ytscreeningroom\?vi?=|youtu\.be\/|vi?\/|user\/.+\/u\/\w{1,2}\/|embed\/|watch\?(?:.*\&)?vi?=|\&vi?=|\?(?:.*\&)?vi?=)([^#\&\?\n\/<>"']*)

Đút vào Hugo, lỗi cmnl. Code nó thế! Chạy chỗ này không chạy chỗ khác là thường.

Jờ fải làm sao? Gúc chứ sao. Cách jaiquyet của bọn trình cao như mình nó (fải) thế! 🤗

À…, thì ra cần thay ký tự escapement (\) thành double escapement (\\). Kiểu của Hugo nó thế! Thay thử, vẫn lỗi. Huhu… Đời nó thế! Lúc ta nghĩ ổn rồi là lúc nó xoè ra trước mắt ta cái thongbao lỗi đỏ lòm.

Quyết không hàng. Cơm không ăn thì bụng còn đấy. Trưa không ăn thì tối ăn.

Tiếp tục mò mẫm. Thấy YoutubeID là chuỗi 11 ký tự (hiện jờ thế, không biết sau này thenao. Kệ cụ nó!). Làm cái regex ngắn thenay thoy. Chỉ cần bắt được ID trong 3 mẫu fobien là đủ rồi.

1
http.*(?:youtu.*)[=/]([A-Za-z0-9_-]{11})

Haha!&hellip; Bố mài tóm được hết chúng mài rồi nhá.
Haha!… Bố mài tóm được hết chúng mài rồi nhá.

Cuối ngày mò thêm được một cái khác. regex101: get video id from youtube link

Đoạn regex này hơi zài. Không biết tóm được nhiều và chính xác hơn không. Ít ra chế vào code nom cũng có vẻ “nguyhiem” hơn cái trên.

1
^(?:https?:\/\/)?(?:(?:www\.)?youtube\.com\/(?:(?:v\/)|(?:embed\/|watch(?:\/|\?)){1,2}(?:.*v=)?|.*v=)?|(?:www\.)?youtu\.be\/)([A-Za-z0-9_\-]+)&?.*$

Regex101 chạy OK
Regex101 chạy OK

Đem sang Hugo fải biên thenay (chạy cũng OK):

1
^(?:https?:\\/\\/)?(?:(?:www\\.)?youtube\\.com\\/(?:(?:v\\/)|(?:embed\\/|watch(?:\\/|\\?)){1,2}(?:.*v=)?|.*v=)?|(?:www\\.)?youtu\\.be\\/)([A-Za-z0-9_\\-]+)&?.*$

tổng kết

Kouveo thích donjan nên chọn cái ngắn nhất để zùng. Làm jaitri chứ có fải cày xèng điếu đâu. Quantrong là cái đoạn ngắn ngắn ý là zo Kouveo biên ra và hiểu được nó. Mấy cái kia chỉ copy-paste, đến xem có những ji trong đó còn ngại vaidai, hiểu thedeonao được.

Gần 1 ngày sục sạo, xem và ngẫm lại đám regex code cũng “vỡ” ra được nhiều thứ (nhớ được không lại là chuyện khác). Xét ra cũng chỉ là nâng cấp tí chút so với bản cũ. Thế nhưng để có được cái “tí chút” ấy cũng fải vần vò cắt zán, thử đi thử lại chán chê mới hiểu được.

/blog/202112/working-with-youtube-id/
dev regex hugo youtube markup render