使用或不使用正则表达式提取 YouTube ID

2023-12-10

请告诉我如何在不使用正则表达式的情况下获取youtube ID?

使用上述方法以下 URL,没用

http://www.youtube.com/e/dQw4w9WgXcQ

public static String extractYTId(String youtubeUrl) {
    String video_id = "";

    try {
        if(youtubeUrl != null && youtubeUrl.trim().length() > 0 && youtubeUrl.startsWith("http")) {
            String expression = "^.*((youtu.be" + "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
            //String expression = "^.*(?:youtu.be\\/|v\\/|e\\/|u\\/\\w+\\/|embed\\/|v=)([^#\\&\\?]*).*";
            CharSequence input = youtubeUrl;
            Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(input);
            if(matcher.matches()) {
                String groupIndex1 = matcher.group(7);
                if(groupIndex1 != null && groupIndex1.length() == 11)
                    video_id = groupIndex1;
            }
        }
    } catch(Exception e) {
        Log.e("YoutubeActivity", "extractYTId " + e.getMessage());
    }

    return video_id;
}

其他链接working fine

​​http://www.youtube.com/embed/0zM3nApSvMg?rel=0

http://www.youtube.com/watch?v=0zM3nApSvMg

http://youtu.be/0zM3nApSvMg

http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s

http://youtu.be/dQw4w9WgXcQ

http://www.youtube.com/embed/dQw4w9WgXcQ

http://www.youtube.com/v/dQw4w9WgXcQ

http://www.youtube.com/watch?v=dQw4w9WgXcQ

​​​​


您可以使用以下正则表达式

^(?:(?:https?:\/\/)?(?:www\.)?)?(youtube(?:-nocookie)?\.com|youtu\.be)\/.*?(?:embed|e|v|watch\?.*?v=)?\/?([a-z0-9]+)

正则表达式分解:

  1. ^: 行的开头anchor
  2. (?:(?:https?:\/\/)?(?:www\.)?)?:
    • (?:https?:\/\/)?: Match http:// or https://可选地
    • (?:www\.)?)?: Match www.零次或一次
  3. (youtube(?:-nocookie)?\.com|youtu\.be)\/: Match either
    • youtube.com or youtube-nocookie.com or youtu.be其次是/
  4. .*?: 懒惰的匹配。匹配直到下一个模式满足。
  5. (?:embed|e|v|watch\?.*?v=)?\/?:
    • (?:embed|e|v|watch\?.*?v=)?: Match embed or e or v或来自watch? to v=或无
    • \/?: Match /零次或一次
  6. ([a-z0-9]+):匹配一个或多个字母数字字符并将其添加到捕获的组中。

Live DemoUsing JavaScript

var regex = /^(?:(?:https?:\/\/)?(?:www\.)?)?(youtube(?:-nocookie)?\.com|youtu\.be)\/.*?(?:embed|e|v|watch\?.*?v=)?\/?([a-z0-9]+)/i;

// An array of all the youtube URLs
var youtubeLinks = [
    'http://www.youtube.com/e/dQw4w9WgXcQ',
    'http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ',
    'http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0',
    'http://www.youtube.com/embed/0zM3nApSvMg?rel=0',
    'http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index',
    'http://www.youtube.com/watch?v=0zM3nApSvMg',
    'http://youtu.be/0zM3nApSvMg',
    'http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s',
    'http://youtu.be/dQw4w9WgXcQ',
    'http://www.youtube.com/embed/dQw4w9WgXcQ',
    'http://www.youtube.com/v/dQw4w9WgXcQ',
    'http://www.youtube.com/watch?v=dQw4w9WgXcQ',
    'http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0'
];

// An object to store the results
var youtubeIds = {};

// Iterate over the youtube URLs
youtubeLinks.forEach(function(url) {
    // Get the value of second captured group to extract youtube ID
    var id = "<span class='youtubeId'>" + (url.match(regex) || [0, 0, 'No ID present'])[2] + "</span>";

    // Add the URL and the extracted ID in the result object
    youtubeIds[url] = id;
});

// Log the object in the browser console
console.log(youtubeIds);

// To show the result on the page
document.getElementById('output').innerHTML = JSON.stringify(youtubeIds, 0, 4);
.youtubeId {
    color: green;
    font-weight: bold;
}
<pre id="output"></pre>

RegEx Visualization Diagram

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用或不使用正则表达式提取 YouTube ID 的相关文章

  • 如何提取文件 jre-9/lib/modules?

    In JRE 9 lib目录 至少在 Windows 上 有一个名为modules其大小约为107 MB 是否可以提取该文件或在其中列出 java 模块 我可以看到一个名为jmod可以在jdk 9 bin jmod exe 但那是为了阅读
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 项目缺少所需的注释处理库

    我的 Eclipse IDE 突然在问题视图中显示 xxxx 项目缺少所需的注释处理库 xxxx M2 REPO 中的一些旧 jar 我用谷歌搜索 没有找到任何答案 为什么我的项目使用旧的 jar 以及错误来自哪里 To remove th
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • 检查 IPv4 地址是否在私有范围内

    在 Python 中 使用 IPy 模块您可以执行以下操作 gt gt gt ip iptype PRIVATE 有没有一个库或简单的方法可以在 Java 中执行相同的操作 似乎不完全是但是InetAddress有一些 isXX 方法 例如
  • JTextField 和 JTextArea

    JTextField 和 JTextArea 有什么不同 是否可以在一个班级中使用这两个班级 总之 JTextField 是单行文本字段 而 JTextArea 可以跨越多行 文档中清楚地解释了这些差异 文本区 http docs orac
  • 在 Junit 测试中使用 ReflectionTestUtils.setField()

    我是 JUnittesting 的新手 所以我有一个问题 谁能告诉我为什么我们使用ReflectionTestUtils setField 在我们的 Junit 测试示例中 正如评论中提到的 java 文档很好地解释了用法 但我还想给你们举
  • java.lang.Object的hashCode具体使用的算法是什么

    中使用的算法是什么JVM实施java lang Object的隐含的hashCode 方法 OpenJDK or Oracle JDK答案中首选 它依赖于实现 并且在很大程度上 该算法是entirely取决于实施 只要它是一致的 但是 根据
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • 在 jQuery 选择器上使用正则表达式查找基于 ids 的所有元素

    我有几个具有唯一 id 的元素 如下所示 div div div div div div 我希望使用 jQuery 可以实现以下功能 item top each function this hide 我对正则表达式没有很好的掌握 希望得到一
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • JAXB 编组器无参数默认构造函数

    我想从 java 库中编组一个 java 对象 当使用 JAXB marschaller 编组 java 对象时 我遇到了一个问题 A 类没有无参数默认构造函数 我使用Java Decompiler来检查类的实现 它是这样的 public
  • 如何将库添加到 LIBGDX 项目的依赖项 gradle

    一切都在问题中 我已经尝试了在 SO 和其他网站中找到的所有答案 但没有运气 这就是我迄今为止尝试过的 adding compile fileTree dir lib include jar 到我的 build gradle adding
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • 为什么我不能将 Collection 转换为 Collection>

    问题的关键是 为什么这会导致编译时错误 List
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐

  • Airflow 在成功后多次重新运行单个任务

    按顺序重新运行任务 A 3 次的最佳方法是什么 即任务A gt 任务A gt 任务A gt 任务B 我之所以这么问 是因为我将运行另一个单独的数据验证任务 B 该任务将比较这 3 次单独运行的数据 这就是我到目前为止所做的 dag DAG
  • 问题嵌套近似搜索算法

    我移植了一个近似搜索算法C to Python 逻辑和非常好的原始实现归因于to 然后 我编写了一个脚本来使用该算法来解决二维定位问题 到达时间差问题 二维解决方案效果很好 然而 当我嵌套到 3 维时 脚本不会产生预期的本地化 请注意 这几
  • 使用 RODBC 的参数化查询

    我在 R 中有一个变量 我想将其传递到数据库 我could use paste就像许多人在阅读 Google 结果时建议的那样 但由于 SQL 注入漏洞 这是不安全的 我更喜欢这样的东西 x lt 42 sqlQuery db SELECT
  • 如何捕获 NSString 中特殊指示的 **字符** 并粗体显示中间的内容?

    我无法将指定的 字符对之间的任何字符加粗 例如 在这个 NSString 中 The Fox has ran around the corner 应该读 狐狸跑了around角落 这是我的代码 NSString questionString
  • 在 R 中高效创建数字编码的虚拟变量?

    我们如何转换表单的数据 df lt structure list customer number c 3 3 1 1 3 item c milkshake burger apple burger water row names c NA 5
  • 导入错误:没有名为 py31compat 的模块

    我正在尝试使用安装 gensim sudo H pip install upgrade gensim 但它给了我这个错误 File setup py line 301 in
  • 停止 handler.postDelayed()

    我通过 new Handler postDelayed new Runnable 调用多个处理程序 当我点击返回时如何停止它 public class MyActivity extends AppCompatActivity impleme
  • OpenCV 二进制自适应阈值 OCR

    我需要将一些图像转换为二进制以进行 OCR 以下是我正在使用的功能 Mat binarize Mat Img Mat res float blocksize bool inverse Img convertTo Img CV 32FC1 1
  • 使用 gcc 中的内联汇编从 stdin 扫描并打印到 stdout

    如何在内联汇编 gcc 中读取 stdin 并写入 stdout 就像我们在 NASM 中所做的那样 start mov ecx buffer buffer is a data word initialised 0h in section
  • Html 选择选项提交后丢失数据

    我有两个带有一些数据的选择选项
  • 创建 Expo Config 插件文件来修改 Android 清单

    我需要创建一个 expo 插件文件并在 app json 中调用它 以便在 android 清单中添加以下属性
  • JQuery 单击 iframe 中的按钮

    我正在尝试使用以下命令单击在我无法访问其 html 的网站上找到的按钮 ContentFrame contents find btnPunch click 我无法找到有关如何在 WinForm webBrowser 控件中启用 安装 使用
  • 重新创建一个组件?

    有没有办法在 Svelte 中重新创建组件 上下文是我有一个已经创建的组件 一旦它完成它的过程 我希望它被销毁然后再次创建 这会将其属性恢复到默认状态 并确保对其嵌套组件执行相同的操作 我想这在技术上可以通过现有的组件方法实现 但我想知道是
  • 不同类型List的通用unapply方法

    有没有办法用泛型来概括这段代码 object ListInt def unapply o Any Option List Int o match case lst List if lst forall isInstanceOf Int gt
  • 可以在 Typescript 中扩展类型吗?

    假设我有以下类型 type Event name string dateCreated string type string 我现在想扩展这种类型 即 type UserEvent extends Event UserId string 这
  • OPTIONS http 方法在 Heroku 上给出空响应

    当我在本地执行操作时 我的 CORS 调用工作正常 curl i X OPTIONS http localhost 3000 api v1 login HTTP 1 1 200 OK X Powered By Express Access
  • Android 地图片段

    我正在尝试创建一个具有一个活动和多个片段的 Android 应用程序 每个片段在视图中时都会占据整个屏幕 并且通过替换事务 它应该切换到另一个片段
  • 用于禁用警告的 SunStudio C++ 编译器编译指示?

    与 Sun Studio11 捆绑在一起的 STLport 会生成大量警告 我相信大多数编译器都有办法禁用某些源文件的警告 如下所示 Sun C pragma error messages off include
  • 属性不会序列化到 .designer.cs 文件中

    在 VS2010 中 尽管使用 ShouldSerializeFoo 方法 但使用 DesignerSerializationVisibility Visible Content 也不会序列化控件属性 这是代码 class Class1 U
  • 使用或不使用正则表达式提取 YouTube ID

    请告诉我如何在不使用正则表达式的情况下获取youtube ID 使用上述方法以下 URL 没用 http www youtube com e dQw4w9WgXcQ public static String extractYTId Stri