Создание регулярного выражения для URL в Java: с/без http://
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для поиска URL-адресов можно воспользоваться следующим регулярным выражением:
/https?:\/\/\S+\.\S+/g
Данное выражение будет идеально подходить для обнаружения ссылок с протоколами HTTP и HTTPS, игнорируя при этом пробелы и гарантируя наличие домена и домена верхнего уровня (TLD).
Быстрый экскурс в анатомию регулярного выражения
Во внимание предлагается разбор компонентов нашего шаблона:
https?
: Этот фрагмент ищет «http», причем буква «s» является опциональной, что позволяет поддержать протокол HTTPS.:\/\/
: Он следует за протоколом, обязывая присутствовать два слэша.\S+
: В одно мгновение исключает пробелы и пропускает цепочку непробельных символов.\.\S+
: Запрашивает наличие точки и последующих непробельных символов, что включает в себя TLD.
Увеличиваем разнообразие: учёт различных URL
Чтобы сделать регулярное выражение более толерантным к разнообразию форматов URL, внесем некоторые корректировки:
/(https?:\/\/)?(www\.)?\S+\.\S+/g
В выражении предусмотрено наличие опционального префикса www и возможность отсутствия протокола.
Учёт путей и параметров запросов
URL могут включать дополнительные элементы, поэтому расширим наше выражение:
/https?:\/\/(?:www\.)?\S+\.\S+(?:\/[^\s]*)?/gi
Добавлена поддержка путей и строк запросов, что делает шаблон еще более универсальным.
Когда каждый символ имеет значение
Визуализация
Можешь представить наше регулярное выражение как сеть, расстеленную в цифровом пространстве:
const urlRegex = /https?:\/\/\S+/gi; // Раскидываем нашу сеть в виртуальное море
Каждая проверка вылавливает различные данные из текста:
Океан (🌊): [🐠"http://example.com", 🐟"Невалидный текст", 🐡"https://example.org"]
И специализированная сеть (регулярное выражение) успешно справляется с задачей:
🕸️: ["http://example.com", "https://example.org"]
Она эффективно отреагировала на URL, оставив неподходящие строки за пределами.
Продвинутые инструменты для работы с регулярными выражениями профессионального уровня
Поддержка международных URL и символов Unicode
Если требуется работать с международными доменами, воспользуйся этим выражением:
/(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+/gi
Оно поддерживает протокол ftp и способно продемонстрировать восприятие символов Unicode.
Исключение нежелательных протоколов
Чтобы оградиться от ненужного, используй отрицательный просмотр вперёд:
/https?:\/\/(?!\S*:\/\/)\S+\.\S+/g
Таким образом, можно избежать попадания URL, содержащих повторяющиеся протоколы.
Ищем только домены
Для извлечения доменных имен подойдет следующее базовое выражение:
/((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,6}/gi
Оно исключает домены, заметные благодаря старту или концу с дефисом. В таких вопросах важно первое впечатление.
Валидация URL в реальном времени: обратная связь для пользователя
document.getElementById('urlInput').addEventListener('keyup', function(e) {
const isValidUrl = urlRegex.test(e.target.value);
// Обеспечиваем пользователю мгновенную обратную связь
});
Таким образом можно производить мгновенную валидацию URL, даря пользователю быстрый ответ.
Тестирование в условиях реальной среды
Для проверки в условиях боевого стенда регулярных выражений воспользуйся сервисом regex101 и библиотекой validator.js.
Мозговой центр операции
Полезные материалы
- Регулярные выражения в JavaScript | MDN — всё, что вам следует знать о регулярных выражениях в JavaScript.
- RFC 3986 – Стандартный синтаксис URI — принципы и правила формирования URI.
- URI, URL, и URN: Уточнения и рекомендации — правила и рекомендации применения URL.
- regex-weburl.js · GitHub — всесторонняя коллекция шаблонов регулярных выражений для URL.
- regex101: разработка, тестирование и отладка регулярных выражений — платформа для тестов и экспериментов с регулярными выражениями.
- В поисках идеального регулярного выражения для валидации URL — множество экспериментальных подходов к валидации URL.
- Схемы URI – Википедия — раздел Википедии, освящающий схемы URI.