Amr*_*era 1 javascript regex youtube
我想从 YouTube 的视频网址返回视频 ID,即使对于Shorts也是如此。
但我有适用于一些不包括Shorts 的网址的模式
^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*
编辑: 它应该适用于以下网址:
http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
http://www.youtube.com/embed/0zM3nApSvMg?rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg
http://youtu.be/0zM3nApSvMg
https://youtube.com/shorts/0dPkkQeRwTI?feature=share
https://youtube.com/shorts/0dPkkQeRwTI
Run Code Online (Sandbox Code Playgroud)
谢谢
dom*_*omi 11
这应该适用于提供的示例
(youtu.*be.*)\/(watch\?v=|embed\/|v|shorts|)(.*?((?=[&#?])|$))
Run Code Online (Sandbox Code Playgroud)
https://regex101.com/r/5JhmpW/1 实际视频 ID 应为每场比赛中的第三个捕获组。
你可以像这样在 JavaScript 中使用它:
let data = `http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
http://www.youtube.com/embed/0zM3nApSvMg?rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg
http://youtu.be/0zM3nApSvMg
https://youtube.com/shorts/0dPkkQeRwTI?feature=share
https://youtube.com/shorts/0dPkkQeRwTI`;
let regex = /(youtu.*be.*)\/(watch\?v=|embed\/|v|shorts|)(.*?((?=[&#?])|$))/gm;
let videoIds = [...data.matchAll(regex)].map(x => x[3]);
Run Code Online (Sandbox Code Playgroud)
或者,如果您一次只期望一个 url:
function getVideoId(url) {
let regex = /(youtu.*be.*)\/(watch\?v=|embed\/|v|shorts|)(.*?((?=[&#?])|$))/gm;
return regex.exec(url)[3];
}
Run Code Online (Sandbox Code Playgroud)
请记住,javascript 中的正则表达式不是无状态的,多次运行相同的正则表达式将导致它迭代文本中的匹配项(并最终在到达末尾后返回 NULL),这就是正则表达式重新初始化的原因在这种情况下的每个呼叫。如果没有找到匹配项,它也将返回 null。
| 归档时间: |
|
| 查看次数: |
5546 次 |
| 最近记录: |