从 YouTube 嵌入代码中提取视频 ID

Pulling a video id from YouTube embed code

本文关键字:提取 视频 ID 代码 YouTube      更新时间:2023-09-26

我正在尝试移植PHP preg_match表达式,以从Javascript中的YouTube嵌入代码中提取视频ID。我目前在 PHP 中有这个:

$pattern = '%(?:https?://)?(?:www'.)?(?:youtu'.be/| youtube'.com(?:/embed/|/v/|/watch'?v=))(['w-]{10,12})[a-zA-Z0-9'<'>'"]%x';
$result = preg_match($pattern, $url, $matches);

这有效并返回我一个视频ID。我尝试使用以下内容以使其在Javascript中工作:

var reg = /(?:https?://)?(?:www'.)?(?:youtu'.be/|youtube'.com(?:/embed/|/v/|/watch'?v=))(['w-]{10,12})/g;
var matches = uploadVideoEmbedCode.match(reg);

我使用的测试数据是:

<iframe width="560" height="315" src="http://www.youtube.com/embed/1NMUDb3Ewhs" frameborder="0" allowfullscreen></iframe>

当我尝试在javascript中使用上述正则表达式时,出现以下错误:

未捕获的语法错误:意外的令牌?

您的帮助将不胜感激。

您需要

转义正则表达式中的/斜杠,因为它们是分隔符。每当要匹配文字/时,请使用'/

var reg = /(?:https?:'/'/)?(?:www'.)?(?:youtu'.be'/|youtube'.com(?:'/embed'/|'/v'/|'/watch'?v=))(['w-]{10,12})/g;

另一种选择是使用 new RegExp('...', 'g') 而不是 /.../g - 但随后您需要转义每个反斜杠,这会更烦人:

var reg = new RegExp('(?:https?://)?(?:www''.)?(?:youtu''.be/|youtube''.com(?:/embed/|/v/|/watch''?v=))([''w-]{10,12})', 'g');

若要最终获取 ID,请使用 var id = reg.exec(yourString)[1]

您必须转义正则表达式中的正斜杠:'/ .