使用JavaScript获取YouTube ID。匹配()

时间:2013-07-16 00:41:28

标签: php javascript jquery regex youtube

所以我在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上发现了一些类似的帖子,但它们远不如这个正则表达式复杂,并且无法让我的头脑满足于差异。

1 个答案:

答案 0 :(得分:2)

不是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"]