lazy_static::lazy_static! {
pub static ref ID_PATTERNS: Vec<regex::Regex> = {
vec![
regex::Regex::new(r"^(https?://)?(www\.)?youtube.\w\w\w?/watch\?v=(?P<id>[a-zA-Z0-9_-]{11})(&.*)?$").unwrap(),
regex::Regex::new(r"^(https?://)?(www\.)?youtube.\w\w\w?/embed/(?P<id>[a-zA-Z0-9_-]{11})\\?(\?.*)?$").unwrap(),
regex::Regex::new(r"^(https?://)?youtu\.be/(?P<id>[a-zA-Z0-9_-]{11})$").unwrap(),
regex::Regex::new("^(?P<id>[a-zA-Z0-9_-]{11})$").unwrap(),
]
};
}
pub fn from_raw(raw: &str) -> Option<String> {
ID_PATTERNS.iter().find_map(|pattern| {
pattern.captures(raw).map(|c| {
let id = c.name("id").unwrap().as_str();
format!("https://youtube.com/embed/{}", id)
})
})
}