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

Nei*_*ung 1 javascript regex jquery preg-match

我正在尝试移植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);
Run Code Online (Sandbox Code Playgroud)

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

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

我使用的测试数据是:

<iframe width="560" height="315" src="http://www.youtube.com/embed/1NMUDb3Ewhs" frameborder="0" allowfullscreen></iframe>
Run Code Online (Sandbox Code Playgroud)

当我尝试在javascript中使用上面的正则表达式时,我收到以下错误:

未捕获的SyntaxError:意外的令牌?

非常感谢您的帮助.

Thi*_*ter 5

您需要/在正则表达式中转义斜杠,因为它们是分隔符.使用\/时要匹配文字/:

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

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

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

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