You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Dart正则表达式从YouTube视频URL中提取视频ID

用正则表达式提取YouTube视频ID及参数的实现方案

嘿,用正则来实现这个需求其实比字符串替换更灵活,能一次性兼容你提到的两种URL格式,甚至还能覆盖更多变体(比如http协议的URL)。咱们直接来看具体实现:

思路解析

我们需要匹配YouTube视频URL的固定前缀部分,然后捕获v=之后的所有内容(包括你需要保留的t参数)。对应的正则表达式可以这样设计:
^https?://(www\.|m\.)?youtube\.com/watch\?v=(.*)$

拆解一下这个正则的各个部分:

  • ^:匹配字符串的起始位置,确保我们从URL开头就开始匹配
  • https?://:兼容http://和https://两种协议,?表示s是可选的
  • (www\.|m\.)?:匹配www.或者m.子域名,?表示这部分是可选的(比如如果URL不带子域名也能匹配)
  • youtube\.com/watch\?v=:匹配URL里固定的路径和参数前缀
  • (.*):捕获v=之后的所有内容,也就是你需要的视频ID和后续参数

Java代码实现

结合你的需求,写出对应的Java方法:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public String getVideoID(String url) {
    // 定义正则表达式,注意Java里需要转义反斜杠
    String youtubeRegex = "^https?://(www\\.|m\\.)?youtube\\.com/watch\\?v=(.*)$";
    Pattern pattern = Pattern.compile(youtubeRegex);
    Matcher matcher = pattern.matcher(url);
    
    // 如果匹配成功,返回捕获到的第二组内容(也就是v=后面的部分)
    if (matcher.find()) {
        return matcher.group(2);
    }
    // 若URL不匹配格式,可返回空字符串或根据业务需求抛出异常
    return "";
}

额外说明

  • 这个方法不仅能处理你给出的两个示例URL,还能兼容http://www.youtube.com/watch?v=xxx这类不带https的情况
  • 相比你原来的字符串替换方案,正则的扩展性更强——如果以后遇到其他YouTube URL变体(比如不带子域名的),不需要额外添加replaceAll语句,正则已经覆盖了这些场景

内容的提问来源于stack exchange,提问作者Shahzad Akram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:04:16