来自 URL 的 YouTube 视频 ID - Swift3

2024-04-26

基本上我有一个 Youtube URL 作为字符串,我想从该 URL 中提取视频 ID。我在 Objective C 中找到了一些代码,如下所示:

NSError *error = NULL;
NSRegularExpression *regex = 
[NSRegularExpression regularExpressionWithPattern:@"?.*v=([^&]+)"
                                          options:NSRegularExpressionCaseInsensitive
                                            error:&error];
NSTextCheckingResult *match = [regex firstMatchInString:youtubeURL
                                                options:0
                                                  range:NSMakeRange(0, [youtubeURL length])];
if (match) {
    NSRange videoIDRange = [match rangeAtIndex:1];
    NSString *substringForFirstMatch = [youtubeURL substringWithRange:videoIDRange];
}

当我将此代码转换为 swift3 时,即:

var error: Error? = nil
var regex = try! NSRegularExpression(pattern: "?.*v=([^&]+)", options: .caseInsensitive)
var match = regex!.firstMatch(in: youtubeURL, options: [], range: NSRange(location: 0, length: youtubeURL.length))!
if match {
    var videoIDRange = match.rangeAt(1)
    var substringForFirstMatch = (youtubeURL as NSString).substring(with: videoIDRange)
}

给出错误为:

致命错误:“尝试!”表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=2048“值“?.*v=([^&]+)”无效。”

任何人都可以帮助我解决此错误,或者任何人可以解释如何从 Swift 3 中的 url 获取视频 ID。

提前致谢


Safer版本(无需强制解包!):

extension String {
    var youtubeID: String? {
        let pattern = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/)|(?<=shorts/))([\\w-]++)"
        
        let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive)
        let range = NSRange(location: 0, length: count)

        guard let result = regex?.firstMatch(in: self, range: range) else {
            return nil
        }
        
        return (self as NSString).substring(with: result.range)
    }
}

例子:

"https://www.youtube.com/watch?v=C0DPdy98e4c".youtubeID // "C0DPdy98e4c"
"https://youtube.com/watch?v=C0DPdy98e4c".youtubeID // "C0DPdy98e4c"
"www.youtube.com/watch?v=C0DPdy98e4c".youtubeID // "C0DPdy98e4c"
"youtube.com/watch?v=C0DPdy98e4c".youtubeID // "C0DPdy98e4c"
"youtube.com/shorts/C0DPdy98e4c".youtubeID // "C0DPdy98e4c"
"youtube.com/embed/C0DPdy98e4c".youtubeID // "C0DPdy98e4c"

"https://youtu.be/C0DPdy98e4c".youtubeID // "C0DPdy98e4c"
"youtu.be/C0DPdy98e4c".youtubeID // "C0DPdy98e4c"

学分:乌斯曼·尼萨尔的回答 https://stackoverflow.com/a/44039304/2177402

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

来自 URL 的 YouTube 视频 ID - Swift3 的相关文章

随机推荐

  • 在 Ionic、ngCordova (AngularJS) 中的 Ionic Sqlite 中调用主控制器之前打开数据库?

    我有一个函数 init DB this db cordovaSQLite openDB name pasa db cordovaSQLite execute this db CREATE TABLE IF NOT EXISTS dashbo
  • Tab 键在 Visual Studio 代码中不起作用

    Tab 键在 Visual Studio 代码中无法用于缩写 我已经尝试了很多 我该如何解决这个问题 我很沮丧 考虑使用 Bracket 而不是 Visual Studio 代码 In my case Using Ctrl M return
  • 过滤 dataGridView 时“未将对象引用设置为对象的实例”

    我有这个搜索功能 为了标记来自MySQL数据库的与关键字列表匹配的评论 标记的评论将显示在dataGridView flaggedComments 然后填充comboBox stockIndex以及相关的股价代码 例如 BARC LLOY
  • javascript 唯一的随机数

    experts 我希望在两个数字之间生成唯一的随机数 来自网页的文本框 我正在使用数组来存储数字 当用户单击按钮时 它给出第一个随机数 将其存储在数组中 当用户再次单击按钮时 它生成随机数 将其与数组数字进行比较 如果不同 则存储并显示 如
  • 为什么 Google 日历全天活动使用 php 返回今天的开始日期

    我正在使用 Google 日历 api V3 和 PHP 并尝试获取活动的摘要 描述和开始日期 我的问题是最后一个元素 开始日期 当日历中的事件设置为 全天 事件时 以下代码的响应将提供今天的日期以及进行查询时的确切时间 echo div
  • 您可以通过选项卡浏览所有单选按钮吗?

    我有一个单选按钮列表 当我通过选项卡浏览它们时 似乎只有第一个单选按钮或选定的单选按钮将获得焦点 其余单选按钮将被跳过 checkbox没有这个问题 http jsfiddle net 2Bd32 http jsfiddle net 2Bd
  • 服务器和客户端上带有 Handlebars.js 的 Node.js

    我在 Node js 中有一个应用程序 使用 Expressjs 和 Handlebars 作为模板引擎 Expressjs 使用布局 然后渲染视图 布局 layout hbs 如下所示 body The body 当您访问路由时 在 No
  • 路由的登录和身份验证(反应或服务器端)

    我正在尝试保护反应页面上的表单路由 我在服务器端注册并登录 对于如何对该路由使用身份验证有点困惑 这是我的 app js 我的客户端路由 const App gt return
  • 删除图像中小于 n 大小(噪声)的像素 - open CV python

    我正在尝试减少图像中的噪音 目前正在运行此代码 import numpy as np import argparse import cv2 from skimage import morphology Construct the argum
  • 如何在 Live() 上绑定滚动事件?

    不久前我为某人解决了一个问题希望他的文本区域变大 https stackoverflow com questions 4717635 jquery building an autoresizing textarea that doesnt
  • 如何用Java实现Kerberos协议转换? (S4U2自我)

    Edit 现在我知道我需要什么了 我需要在Java中实现Kerberos协议转换 S4U2Self Net 中有示例 但没有 Java 的示例 有这个第三方库Java 版 Quest 单点登录 http www quest com sing
  • 对 null/空值使用 bool.Parse 时出错

    我有一个使用管道运算符的表达式 该表达式将值转换为字符串 然后转换为布尔值 但有时原始值可能为空 当值为 null 时 如何使用模式匹配或其他方式假设 false type kv Dictionary
  • 如何切换 UITableView Cell 的选定状态

    我有一个带有自定义单元格的 UITableView 该单元格包含一个 UIImageView 和一个 UILabel 现在 当我第一次加载表格时 它会在每个单元格上加载相同的图像和不同的标签 这些标签是从 LabelArray 中获取的 现
  • 如何在c中创建信号量?

    我正在尝试重新创建一个 黑盒 库 在我的计算机科学课程中 当我们应该使用信号量时 在我们的纸质期末考试中 我们会得到一个 sem h 文件 有 3 个函数 一个用于创建具有初始数量令牌的新信号量 一个用于从信号量中取出令牌 一个用于将令牌放
  • Bootstrap 模态和传递值

    当我单击编辑时 id 应该传递到自己的页面 并且模式应该弹出 但这不起作用 请帮我 PHP 和 Bootstrap tr td td td a href gt Edit a td tr Modal div class modal fade
  • 使用 iTextSharp 和 PDFStamper 在 PDF 中使用不同的字体

    我正在使用 iTextSharp 加载现有 PDF 并使用 PdfStamper 添加文本 我想要完全控制文本 这意味着我想要能够控制字体 仅限 TrueType 字体大小和坐标 现在 我使用 ShowTextAligned 将文本添加到某
  • 根据文档,Django 1.8spectdb 命令看不到 PostgreSQL 视图

    我有一个带有 PostgreSQL 数据库的 Django 1 8 应用程序 我从命令行运行 django inspectdb 来检查模型的视图 但视图不会显示在模型输出中 这是版本输出 17 36 python well manage p
  • NSPredicate:获取每种类型之一

    我想创建一个NSFetchRequest对于这样的对象 The Object is Car其中有一个attribute color 我有四辆车 car1 color red car2 color red car3 color blue ca
  • 将数字格式设置为缩写数字

    我有一个数据库 其中有一列包含数字格式的值 例如 5 000 for 5k 86 600 for 86 6k 4 100 000 for 4 1m 在浏览器中显示时 它应该显示为 5000 的 5k 86 600 的 86 6k 等 我需要
  • 来自 URL 的 YouTube 视频 ID - Swift3

    基本上我有一个 Youtube URL 作为字符串 我想从该 URL 中提取视频 ID 我在 Objective C 中找到了一些代码 如下所示 NSError error NULL NSRegularExpression regex NS