Tim*_*imo 0 javascript ecmascript-6
我有一个<input type="text">字段,用户可以将 YouTube 网址粘贴到其中。有效值为:
http://www.youtube.com/watch?v=VIDEO_ID // Regular url
http://youtube.com/watch?v=VIDEO_ID // No "www"
https://www.youtube.com/watch?v=VIDEO_ID // With ssl
https://youtube.com/watch?v=VIDEO_ID // ssl but no "www"
www.youtube.com/watch?v=VIDEO_ID // No http(s) at all but with "www"
youtube.com/watch?v=VIDEO_ID // No http(s) and no "www"
https://youtu.be/VIDEO_ID // Shortened version with ssl
http://youtu.be/VIDEO_ID // Shortened version without ssl
youtu.be/VIDEO_ID // Shortened version without protocol
Run Code Online (Sandbox Code Playgroud)
其中 VIDEO_ID 显然是视频的 id,它可以是随机字符串,例如ROjxlXgFbs4。
正如您所看到的,用户可以将很多变体发布到该输入字段中。
所以,基本上我需要一个这样的函数:
// Returns false if invalid YouTube URL. If url is valid, returns video id.
function getId(url) {}
Run Code Online (Sandbox Code Playgroud)
所以它可以这样使用:
let url1 = "foo";
let url2 = "https://youtu.be/123";
let res1 = getId(url1); // returns false
let res2 = getId(url2); // returns 123
Run Code Online (Sandbox Code Playgroud)
我在 SO 上看到过类似的问题,但我不认为它们涵盖了所有的 url 变体。我可能可以编写一些有用的代码,但它很可能会变得非常难看。有没有一种聪明的方法可以用尽可能少的代码(例如使用正则表达式)来做到这一点?
/^(?:https?:\/\/)?(?:(?:www\.)?youtube.com\/watch\?v=|youtu.be\/)(\w+)$/
Run Code Online (Sandbox Code Playgroud)