Я пытаюсь понять, почему какое-то регулярное выражение не соответствует последнему буквенно-цифровому символу некоторого заданного текста, который может содержать или не содержать URL-адрес YouTube.Почему это регулярное выражение не соответствует последнему буквенно-цифровому символу?
Все регулярное выражение равно /(?:https|http):\/\/(?:www\.){0,1}(?:youtube\.com|youtu\.be)\/(?:watch\?v=){0,1}(\w+)[^\s]+/mig
(оно соответствует URL-адресу youtube.com или youtu.be, пока не найдет пробел).
Вот фрагмент кода, который работает, как например, о моей проблеме (он показывает матч первого регулярного выражения, как JSON):
var match = /(?:https|http):\/\/(?:www\.){0,1}(?:youtube\.com|youtu\.be)\/(?:watch\?v=){0,1}(\w+)[^\s]+/mig.exec("https://www.youtube.com/watch?v=8C6xDjQ66wM");
document.getElementById("result").textContent = JSON.stringify(match);
<div id="result"></div>
Если выполнить так называемое регулярное выражение, оно 'll соответствует идентификатору видео YouTube, но ему не хватает последнего символа (он должен соответствовать 8C6xDjQ66wM
, но он соответствует 8C6xDjQ66w
).
Ваше регулярное выражение может быть упрощено до 'HTTPS: \/\/(?: WWW \.)? youtu (?: be \ .com | \ .be) \/(?: watch \? v =)? (\ w +) \ S + ' – Oriol
@Oriol Спасибо! Теперь, когда начинается безумство regexp! Я имею в виду, что другой пользователь может приехать сюда и повторно оптимизировать ваше собственное регулярное выражение, а другое снова ... hahaha Спасибо за предложение –