【问题标题】:Get YouTube ID using JavaScript .match()使用 JavaScript .match() 获取 YouTube ID
【发布时间】:2013-07-14 00:36:00
【问题描述】:

所以我在 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 上发现了一些类似的帖子,但它们远没有这个正则表达式复杂,而且我无法理解其中的差异。

【问题讨论】:

  • ~ 是您在 PHP 中的分隔符,但在 JS 中它始终是 /,因此您需要转义所有 / 并摆脱 ~。看到提示有问题的语法突出显示?

标签: php javascript jquery regex youtube


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2016-02-19
    • 2015-12-01
    • 2011-07-22
    相关资源
    最近更新 更多