Регулярные выражения: извлечение данных из тега HTML

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы выбрать конкретный отрезок текста, применяем скобки ( ) в регулярных выражениях, создавая тем самым захватывающие группы. Например, чтобы выделить число в тексте, ваш JavaScript код будет выглядеть так:

JS
Скопировать код
const regex = /(\d+)/;
const str = "Пример 123";
const match = str.match(regex);

console.log(match[1]); // Вывод: 123

Функция match() извлекает число 123 с помощью захватывающей группы \d+, соответствующей числам. Обращаясь к match[1], получим нужный фрагмент текста.

Кинга Идем в IT: пошаговый план для смены профессии

Углубленные методы извлечения

Учёт регистра символов и проведение проверки на совпадения

Если в HTML-документе или в ваших данных регистр символов не имеет значения, примените флаг i для игнорирования различий в регистре. Перед обращением к захваченной группе убедитесь, что совпадение действительно найдено, чтобы предотвратить ошибки NoneType или undefined.

JS
Скопировать код
const regex = /<title>(.*?)<\/title>/i; 
const str = "<title>Название моей страницы</title>";
const match = str.match(regex);

if (match) {
    console.log(match[1]); // Вывод: Название моей страницы
}

Гибкость в условиях различных структур

HTML-разметка может быть неидеально структурирована. Поэтому регулярные выражения должны быть довольно гибкими, чтобы учитывать возможные вариации.

JS
Скопировать код
const regex = /<h[1-6]>(.*?)<\/h[1-6]>/;

Это регулярное выражение позволяет извлекать содержимое заголовков от <h1> до <h6>, независимо от их форматирования.

Beautiful Soup — надёжный помощник в парсинге HTML

Когда извлечение данных из HTML кажется сложной задачей, приходит на помощь библиотека Beautiful Soup. Оснащена всеми необходимыми инструментами для поиска и навигации по дереву документа.

Python
Скопировать код
from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
title_text = soup.title.string

Этот подход повышает читабельность и упрощает поддержку кода.

Обработка ошибок и производительность — наша ответственность

Не забывайте о внедрении обработки ошибок, чтобы надёжно обходить непредвиденные исключения.

При работе с большими объёмами данных помните об оптимизации шаблонов регулярных выражений для повышения производительности.

Захватывающие группы с небольшим секретом

Стартуя с Python 3.8, в язык был внедрен новый оператор присваивания — "моржовый оператор", осуществляющий одновременное присваивание и возврат значения.

Python
Скопировать код
import re

if (match := re.search(r'(\d+)', "Ответ – 42")):
    print(match.group(1))  // Вывод: 42, всегда 42.

В данном случае group(1) позволяет получить нужный вам фрагмент текста.

Визуализация

Рассмотрим извлечение определенного фрагмента текста как поиск сокровища:

Markdown
Скопировать код
Древний текст (📜): "Секретный код 'R2D2' – это то, что вам нужно."

Ваше регулярное выражение, как карта (🗺️): /секретный код '(\w+\d+)'/ 

Желаемое сокровище (💎): 'R2D2'

Захватывающие группы помогают нам найти сокровище:

Markdown
Скопировать код
🗺️ ➡️ 📜 ➡️ 💎
// Ваша "карта" регулярных выражений — инструкция по извлечению желаемого сокровища из текста.

Совершенствование навыков: продвинутые методы

Именованные группы для улучшения читаемости

Используя именованные захватывающие группы, можно улучшить читаемость регулярных выражений и обращаться к содержимому групп по именам, не по индексам.

JS
Скопировать код
const regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const str = "Дата события: 2021-08-17";
const match = str.match(regex);

console.log(match.groups.year); // Вывод: 2021

Условия и предпросмотры

Для подтверждения наличия определенных шаблонов в совпадении без их фактического захвата используйте предпросмотры и предпросмотры заднего вида.

JS
Скопировать код
const regex = /(?<=\$)\d+/;

Переиспользование результатов

Вместо того чтобы проводить повторные операции, сохраняйте объекты совпадений для последующего использования, будь то в условных конструкциях или в дополнительной обработке.

JS
Скопировать код
const regex = /(\d+)/;
const str = "Пример 123";
const match = str.match(regex);

if (match) {
    // Дополнительные операции с совпадением
}

Полезные материалы

  1. Регулярные выражения – JavaScript | MDN — углубленное изучение регулярных выражений на JavaScript.
  2. regex101: создание, тестирование и отладка регулярных выражений — веб-инструмент для тестирования и разработки регулярных выражений с обучающими комментариями.
  3. Регулярные выражения :: Углублённый JavaScript — корректное использование регулярных выражений в JavaScript.
  4. String.prototype.match() – JavaScript | MDN — документация по методу match.
  5. ES2018: Именованные захватывающие группы в RegExp — об использовании именованных групп в JavaScript.
  6. Regular-Expressions.info – Подробный учебник по регулярным выражениям — детальный учебник по регулярным выражениям.
  7. RegexOne – Обучение регулярным выражениям — интерактивные учебные занятия для начинающих изучать регулярные выражения.