使用JavaScript.match()获取YouTube ID


Get YouTube ID using JavaScript .match()

所以我在PHP中有一个可用的preg_match,但是,就我的一生而言,我无法使用Javascript/jQuery获得相同的函数。

这就是我目前所坚持的:

yt=$('#yt').val().match(/~^'(?:https?://')?(?:www'.)?(?:youtube'.com|youtu'.be)(?:/)(?:watch'?v=)?([^&]+)~x/);
alert(yt[1]);

这是PHP中的工作函数:

$rx = "~"
."^(?:https?://)?"             // Optional protocol
."(?:www'.)?  "                // Optional subdomain
."(?:youtube'.com|youtu'.be)"  // Mandatory domain name
."(?:/)"                //mandatory bracket
."(?:watch'?v=)?"       //optional URI
."([^&]+)"           //video id as capture group 1
."~x";
$has_match = preg_match($rx, $url, $matches);

知道如何让它发挥作用吗?

我在Stack上发现了一些类似的帖子,但它们远没有这个正则表达式复杂,我无法理解其中的差异。

不是100%确定,但我认为您没有正确地逃脱所有操作。

yt=$('#yt').val().match("^(?:https?://)?(?:www'.)?(?:youtube'.com|youtu'.be)(?:/)(?:watch'?v=)?([^&]+)")
alert(yt[1]);

"https://www.youtube.com/watch?v=dQw4w9WgXcQ".match("^(?:https?://)?(?:www'.)?(?:youtube'.com|youtu'.be)(?:/)(?:watch'?v=)?([^&]+)");

中的结果

["https://www.youtube.com/watch?v=iQbS-8m3svw", "watch?v=dQw4w9WgXcQ"]