Я пытаюсь преобразовать * эту функцию в Dart, но пока безуспешно. Я немного запутался в том, как часть регулярных выражений. Моя реализация с использованием regExp.allMatches *** (url) *** всегда возвращает весь URL.
Javascript версия:
function youtube_parser(url){
var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
var match = url.match(regExp);
return (match&&match[7].length==11)? match[7] : false;
}
Версия WIP Dart:
RegExp regExp = new RegExp(
r'.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*',
caseSensitive: false,
multiLine: false,
);
final match = regExp.allMatches(url);
Может ли кто-нибудь помочь мне в этом?
РЕДАКТИРОВАТЬ:
Входные URL-адреса:
final urls = [
'http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index',
'http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o',
'http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0',
'http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s',
'http://www.youtube.com/embed/0zM3nApSvMg?rel=0',
'http://www.youtube.com/watch?v=0zM3nApSvMg',
'http://youtu.be/0zM3nApSvMg',
];
Выход для getYoutubeVideoId (url) для каждого должен быть 0zM3nApSvMg
Заранее спасибо,
Фелипе