Dart извлекает хост из строки URL

Предположим, что у меня есть следующий URL-адрес в виде строки;

String urlSource = 'https://www.wikipedia.org/';

Я хочу извлечь имя главной страницы из этой строки URL; 'wikipedia', удалив часть https://, www, .com, .org из URL-адреса.

Каков наилучший способ извлечь это? В случае RegExp, какое регулярное выражение мне нужно использовать?

«Википедия» — это не имя страницы, это домен 2-го уровня. В любом случае, [^\.]+(?=\.[^\.]+$) сработает.

MonkeyZeus 21.12.2020 18:30

Как отмечено ниже, лучше использовать уже существующий фрагмент кода для обработки синтаксического анализа за вас. Здесь два урока: 1) не для каждой проблемы, связанной со строками, требуется регулярное выражение, и 2) если проблема связана с тем, что другие люди, вероятно, сталкивались с ней, поищите существующий код, который сделает это за вас.

Andy Lester 21.12.2020 18:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
2
6 164
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В этом случае вам не нужно использовать RegExp.

В Dart есть готовый класс для разбора URL-адресов:

Ури

То, чего вы хотите достичь, довольно просто с помощью этого API:

final urlSource = 'https://www.wikipedia.org/';

final uri = Uri.parse(urlSource);
uri.host; // www.wikipedia.org

Свойство Uri.host даст вам www.wikipedia.org. Оттуда вы легко сможете извлечь wikipedia.

Uri.host также удалит весь путь, то есть все, что находится после / после хоста.

Извлечение домена второго уровня

Если вы хотите получить домен второго уровня, то есть wikipedia от хоста, вы можете просто сделать uri.host.split('.')[uri.host.split('.').length - 2].

Однако обратите внимание, что это не является безопасным, поскольку у вас могут быть поддомены или нет (например, www), а домен верхнего уровня также может состоять из нескольких частей. Например, co.uk использует co в качестве домена второго уровня.

ОП не спрашивал об извлечении хоста.

MonkeyZeus 21.12.2020 18:33

@MonkeyZeus Я добавил объяснение: получение домена второго уровня на самом деле не всегда возможно без карты всех доменов верхнего уровня. Поэтому мой простой пример должен подойти. Тем не менее, это действительно тривиально оттуда ..

creativecreatorormaybenot 21.12.2020 18:36

Если OP не имеет дело с настроенным DNS или локальным хостом, я полагаю, что TLD гарантирован для общедоступных веб-сайтов, поэтому вам не нужно заботиться о том, что это такое, а скорее извлекать предпоследнюю строку при разделении по периоду.

MonkeyZeus 21.12.2020 18:42

@MonkeyZeus Я согласен. Это настолько тривиально, что ответ, вероятно, будет более полезным, если он будет более общим.

creativecreatorormaybenot 21.12.2020 18:45

Я не знаком с дротиками, но однострочник может быть uri.host.split('.')[uri.host.split('.').length - 2]

MonkeyZeus 21.12.2020 18:48

Предупреждение: Uri#host на самом деле не работает, если нет протокола. Uri.parse('www.wikipedia.org/').host есть "".

Ben Butterworth 07.12.2022 00:08

Другие вопросы по теме