Предположим, что у меня есть следующий URL-адрес в виде строки;
String urlSource = 'https://www.wikipedia.org/';
Я хочу извлечь имя главной страницы из этой строки URL; 'wikipedia', удалив часть https://, www, .com, .org из URL-адреса.
Каков наилучший способ извлечь это? В случае RegExp, какое регулярное выражение мне нужно использовать?
Как отмечено ниже, лучше использовать уже существующий фрагмент кода для обработки синтаксического анализа за вас. Здесь два урока: 1) не для каждой проблемы, связанной со строками, требуется регулярное выражение, и 2) если проблема связана с тем, что другие люди, вероятно, сталкивались с ней, поищите существующий код, который сделает это за вас.





В этом случае вам не нужно использовать 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 Я добавил объяснение: получение домена второго уровня на самом деле не всегда возможно без карты всех доменов верхнего уровня. Поэтому мой простой пример должен подойти. Тем не менее, это действительно тривиально оттуда ..
Если OP не имеет дело с настроенным DNS или локальным хостом, я полагаю, что TLD гарантирован для общедоступных веб-сайтов, поэтому вам не нужно заботиться о том, что это такое, а скорее извлекать предпоследнюю строку при разделении по периоду.
@MonkeyZeus Я согласен. Это настолько тривиально, что ответ, вероятно, будет более полезным, если он будет более общим.
Я не знаком с дротиками, но однострочник может быть uri.host.split('.')[uri.host.split('.').length - 2]
Предупреждение: Uri#host на самом деле не работает, если нет протокола. Uri.parse('www.wikipedia.org/').host есть "".
«Википедия» — это не имя страницы, это домен 2-го уровня. В любом случае,
[^\.]+(?=\.[^\.]+$)сработает.