Регулярное выражение для поиска HTML-тегов

Используйте /<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g, чтобы найти все совпадения в тексте. Каждый пример ниже проверен на этом шаблоне, и его можно открыть в Regex Tester с готовыми образцами.

Обновлено

/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g
Открыть в Regex Tester

Пример текста

<p class="intro">Hello <strong>world</strong><br/></p><my-card id="x"></my-card>

7 совпадений

<p class="intro"> <strong> </strong> <br/> </p> <my-card id="x"> </my-card>

Как работает шаблон

ЧастьЗначение
<Открывающая угловая скобка
\/?Необязательный слеш для закрывающих тегов
[A-Za-z][A-Za-z0-9-]*Имя тега, включая пользовательские элементы вроде my-card
(?:\s[^<>]*)?Необязательные атрибуты
\/?>Необязательный слеш для самозакрывающихся тегов и закрывающая скобка

Примеры кода

JavaScript

const matches = text.match(/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g) ?? [];

Python

import re

matches = re.findall(r'</?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?/?>', text)

PHP

preg_match_all('/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/', $text, $m);
$matches = $m[0];

Примечания и ограничения

Подходит для быстрого поиска и подсветки, но регулярные выражения не могут надёжно разбирать HTML (комментарии, скрипты, атрибуты, содержащие символ >). Для важных задач используйте DOMParser или полноценный парсер. Чтобы удалить теги и сохранить текст, см. удаление HTML-тегов с помощью регулярных выражений.

Часто задаваемые вопросы

Какое регулярное выражение для поиска HTML-тегов?
/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g — находит все совпадения в тексте. Что делает каждая часть, см. в таблице выше.
Работает ли это в Python и PHP?
Да — примеры кода выше используют тот же шаблон: re в Python и функции preg в PHP.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и образец текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.