J'ai trouvé deux regex javascript utiles mais aucune d'elles ne semble fonctionner correctement sur Swift.REGEX pour obtenir Vimeo & Dailymotion ID
Cela fonctionne avec une URL Youtube, mais pas avec Vimeo et DailyMotion. Les deux Vimeo & Dailymotion regex fonctionne sur javascript.
Merci les gars.
** EDIT AVEC LA SOLUTION **
Merci GreatBigBore et Larme
private func getVendorId(_ regexStr:String, _ videoUrl:String, _ search:[Int]) -> String {
let regex = try? NSRegularExpression(pattern: regexStr, options: .caseInsensitive)
let result:[NSTextCheckingResult] = (regex?.matches(in: videoUrl, options: [], range: NSRange(location: 0, length: (videoUrl.characters.count))))!
if result.count > 0 {
let groups = result.first!;
for i in search {
if (groups.rangeAt(i).length != 0) {
return (videoUrl as NSString).substring(with: groups.rangeAt(i))
}
}
}
return "";
}
override func viewDidLoad() {
let youtubeUrl = "https://www.youtube.com/watch?v=MCc0V5bgEF8";
let youtubeRegex = "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)";
let youtubeId = getVendorId(youtubeRegex, youtubeUrl, [0]);
print("YOUTUBE ID -> \(youtubeId)")
let vimeoUrl = "https://player.vimeo.com/video/233459603";
let vimeoRegex = "https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)";
let vimeoId = getVendorId(vimeoRegex, vimeoUrl, [2]);
print("VIMEO ID -> \(vimeoId)")
let dailyMotionUrl = "http://www.dailymotion.com/hub/x9q_Galatasaray";
let dailyMotionRegex = "^.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?";
let dailyMotionId = getVendorId(dailyMotionRegex, dailyMotionUrl, [4, 2]);
print("DAILYMOTION ID -> \(dailyMotionId)")
super.viewDidLoad()
}
Ce code ne compile pas. Je voudrais aider, mais vous devez coller le code réel. J'ai changé le second 'regStr' dans votre définition de fonction en' url', mais j'ai remarqué que vous ne faites rien avec ce paramètre. Essayez de coller le code réel. – GreatBigBore
J'ai modifié le code, merci! – noisedan
'let regRes: [Any]' si vous écrivez 'let regRes: [NSTextCheckingResult]' à la place, vous pouvez éviter le 'as? NSTextCheckingResult' dans 'regRes.first as? NSTextCheckingResult'. Pour le reste, as-tu vérifié toutes les valeurs de 'regRes' au lieu de seulement en premier? Qu'est-ce qu'ils impriment? Puisque vous avez plusieurs groupes regex, il peut être intéressant de trouver celui qui est utile pour chaque regex. – Larme