【问题标题】:regex youtube url for embed with or without playlist用于嵌入或不包含播放列表的正则表达式 youtube url
【发布时间】:2015-05-07 18:46:39
【问题描述】:

我目前有一个函数正在验证一个 youtube url,并从中获取视频 ID,然后返回一个嵌入 url。这对于像“https://www.youtube.com/watch?v=12345678901”这样的 youtube 网址非常有用,但是当网址有播放列表时,我也需要播放列表才能正常工作。需要对正则表达式进行哪些更改才能返回播放列表(如果存在)?

播放列表网址示例: https://www.youtube.com/watch?v=12345678901&list=123456789_1234567890123456789-1234

function embedVideo(url) {
  var youtube = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/,
      yt = url.match(yt);

  if (yt) {
    return "//www.youtube.com/embed/" + yt[1];
  }
  return false;
}

【问题讨论】:

  • 你的正则表达式有效regex101.com/r/pW3cT7/2
  • 是的,但如果它也存在,我需要它来添加播放列表选项。 (&list=...)
  • 你的意思是regex101.com/r/pW3cT7/3
  • 似乎正确。如果您将它在函数中的工作方式作为答案发布,我将对其进行测试并标记为正确。
  • 实际上,我测试过它并且它有效。请将其添加为答案,我会将其标记为正确。

标签: javascript regex


【解决方案1】:

只需捕获&list= 之后的字符。

^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((?:\w|-){11})(?:&list=(\S+))?$

DEMO

【讨论】:

    【解决方案2】:

    上面的括号有一点错误,所以它不适用于带有youtu.be的url应该是:

    ^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/)(?:embed\/|v\/|watch\?v=|watch\?.+&v=)((?:\w|-){11})(?:&(play)?list=(\S+))?$
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多