Youtube Video ID From URL - Objective C

后端 未结 16 902
失恋的感觉
失恋的感觉 2020-12-22 23:23

I basically have a Youtube url as an NSString, but I need to extract the video id that is displayed in the url. I found many tutorials on how to do this in php or and other

16条回答
  •  既然无缘
    2020-12-22 23:58

    Here is RegExp it cover these cases

    Objective C

    - (NSString *)extractYoutubeIdFromLink:(NSString *)link {
        NSString *regexString = @"((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)";
        NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:regexString
                                                                                options:NSRegularExpressionCaseInsensitive
                                                                                  error:nil];
    
        NSArray *array = [regExp matchesInString:link options:0 range:NSMakeRange(0,link.length)];
        if (array.count > 0) {
            NSTextCheckingResult *result = array.firstObject;
            return [link substringWithRange:result.range];
        }
        return nil;
    }
    

    Swift

    func extractYoutubeIdFromLink(link: String) -> String? {
        let pattern = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)"
        guard let regExp = try? NSRegularExpression(pattern: pattern, options: .CaseInsensitive) else {
            return nil
        }
        let nsLink = link as NSString
        let options = NSMatchingOptions(rawValue: 0)
        let range = NSRange(location: 0,length: nsLink.length)
        let matches = regExp.matchesInString(link as String, options:options, range:range)
        if let firstMatch = matches.first {
            return nsLink.substringWithRange(firstMatch.range)
        }
        return nil
    }
    

    Swift 3

    func extractYoutubeIdFromLink(link: String) -> String? {
        let pattern = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)"
        guard let regExp = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) else {
            return nil
        }
        let nsLink = link as NSString
        let options = NSRegularExpression.MatchingOptions(rawValue: 0)
        let range = NSRange(location: 0, length: nsLink.length)
        let matches = regExp.matches(in: link as String, options:options, range:range)
        if let firstMatch = matches.first {
            return nsLink.substring(with: firstMatch.range)
        }
        return nil
    }
    

提交回复
热议问题