Regex для URL-адреса youtube
Я использую следующее regex для проверки youtube видео share.
var valid = /^(http\:\/\/)?(youtube\.com|youtu\.be)+$/;
alert(valid.test(url));
return false;
Я хочу, чтобы регулярное выражение поддерживало следующие форматы URL-адресов:
http://youtu.be/cCnrX1w5luM
http://youtube/cCnrX1w5luM
www.youtube.com/cCnrX1w5luM
youtube/cCnrX1w5luM
youtu.be/cCnrX1w5luM
Я пробовал другое регулярное выражение, но я не получаю подходящего для обмена ссылками. Может ли кто-нибудь помочь мне решить эту проблему. Спасибо заранее.
Ответы
Ответ 1
- Вам не хватает
www
в вашем регулярном выражении
- Второй
\.
должен быть необязательным (поскольку действительны как youtu.be
, так и youtube
)
-
+
в вашем регулярном выражении допускает один или несколько из (youtube\.com|youtu\.be)
, а не одну или несколько диких карт
Вам нужно использовать .
для обозначения wild-card и +
, чтобы указать, что вы хотите одного или нескольких из них.
Try:
^(https?\:\/\/)?(www\.youtube\.com|youtu\.?be)\/.+$
Тест.
Если вы хотите, чтобы он соответствовал URL-адресам с или без www.
, просто сделайте это необязательным:
^(https?\:\/\/)?((www\.)?youtube\.com|youtu\.?be)\/.+$
Если вы хотите, чтобы www.youtu.be/...
также совпал, поставьте необязательный www.
вне скобок:
^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$
Ответ 2
Здесь регулярное выражение, которое я использую для сопоставления и записи важных бит URL-адресов YouTube с помощью видеокодов:
^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$
Работает со следующими URL-адресами:
https://www.youtube.com/watch?v=DFYRQ_zQ-gk&feature=featured
https://www.youtube.com/watch?v=DFYRQ_zQ-gk
http://www.youtube.com/watch?v=DFYRQ_zQ-gk
//www.youtube.com/watch?v=DFYRQ_zQ-gk
www.youtube.com/watch?v=DFYRQ_zQ-gk
https://youtube.com/watch?v=DFYRQ_zQ-gk
http://youtube.com/watch?v=DFYRQ_zQ-gk
//youtube.com/watch?v=DFYRQ_zQ-gk
youtube.com/watch?v=DFYRQ_zQ-gk
https://m.youtube.com/watch?v=DFYRQ_zQ-gk
http://m.youtube.com/watch?v=DFYRQ_zQ-gk
//m.youtube.com/watch?v=DFYRQ_zQ-gk
m.youtube.com/watch?v=DFYRQ_zQ-gk
https://www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
http://www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
//www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
https://www.youtube.com/embed/DFYRQ_zQ-gk?autoplay=1
https://www.youtube.com/embed/DFYRQ_zQ-gk
http://www.youtube.com/embed/DFYRQ_zQ-gk
//www.youtube.com/embed/DFYRQ_zQ-gk
www.youtube.com/embed/DFYRQ_zQ-gk
https://youtube.com/embed/DFYRQ_zQ-gk
http://youtube.com/embed/DFYRQ_zQ-gk
//youtube.com/embed/DFYRQ_zQ-gk
youtube.com/embed/DFYRQ_zQ-gk
https://youtu.be/DFYRQ_zQ-gk?t=120
https://youtu.be/DFYRQ_zQ-gk
http://youtu.be/DFYRQ_zQ-gk
//youtu.be/DFYRQ_zQ-gk
youtu.be/DFYRQ_zQ-gk
https://www.youtube.com/HamdiKickProduction?v=DFYRQ_zQ-gk
Захваченные группы:
- протокол
- субдомена
- домен
- путь
- видео код
- строка запроса
http://regexr.com/3dj5t
Ответ 3
Я знаю, что я как бы опаздываю на вечеринку на 2 года, но мне все равно нужно что-то писать и, похоже, подходит для каждого теста, который я могу на него наброситься. Должна иметь возможность ссылаться на первое совпадение ($ 1), чтобы получить идентификатор. Соответствует http, https, www и non-www, youtube.com, youtu.be,/watch? и /watch.php? на youtube.com(youtu.be не использует их), и он поддерживает сопоставление, даже если в строке URL есть другие переменные (? t = для time,? list = для плейлистов и т.д.).
(?:https?:\/\/)?(?:youtu\.be\/|(?:www\.)?youtube\.com\/watch(?:\.php)?\?.*v=)([a-zA-Z0-9\-_]+)
Ответ 4
Формат для видео YouTube изменился. Это регулярное выражение работает для всех случаев:
^(http(s)??\:\/\/)?(www\.)?((youtube\.com\/watch\?v=)|(youtu.be\/))([a-zA-Z0-9\-_])+
Тесты здесь.
Ответ 5
Попробуйте следующее:
((http://)?)(www\.)?((youtube\.com/)|(youtu\.be)|(youtube)).+
http://regexr.com?36o7a
Ответ 6
На основе многих других регулярных выражений; это лучшее, что у меня есть:
((http(s)?:\/\/)?)(www\.)?((youtube\.com\/)|(youtu.be\/))[\S]+
Test:
http://regexr.com/3bga2
Ответ 7
Я попробовал это, и он отлично работает для меня.
(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'<> #]+)
Здесь вы можете проверить https://regex101.com/r/Kvk0nB/1
Ответ 8
Проверьте этот шаблон вместо:
r'(?i)(http.//|https.//)*[A-Za-z0-9._%+-]+\.\w+'