При работе с внешними данными, выгрузками с сайтов или письмами часто возникает задача очистки полученного текста от HTML-разметки. Обычное удаление подстрок бывает крайне неэффективным, поэтому давайте разберем наиболее надежные и современные способы решения этой задачи в 1С.
Начиная с 23-й версии платформы, разработчики 1С наконец-то внедрили нативный механизм работы с регулярными выражениями. Это лучший способ для кроссплатформенной разработки (работает как на Windows, так и на Linux), так как он не требует использования внешних объектов.
Для удаления тегов нам понадобится функция СтрЗаменитьПоРегулярномуВыражению. Рассмотрим, как это применить на практике:
// Очистка текста от любых HTML-тегов
ТекстСТегами = "<div>Пример текста</div><br>";
Шаблон = "<[^>]*>"; // Регулярное выражение для поиска тегов
ТекстБезТегов = СтрЗаменитьПоРегулярномуВыражению(ТекстСТегами, Шаблон, "");
Преимущество этого метода заключается в скорости и отсутствии привязки к COM-объектам операционной системы.
Если ваша инфраструктура работает исключительно на ОС Windows, вы можете воспользоваться классическим способом через VBScript. Этот метод долгое время был стандартом для 1С, пока не появились нативные функции платформы.
Разберем реализацию по шагам:
VBScript.RegExp.IgnoreCase (игнорирование регистра), Global (поиск всех вхождений), MultiLine (многострочный режим).Replace для удаления найденных шаблонов.
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Ложь;
RegExp.Global = Истина;
RegExp.MultiLine = Ложь;
RegExp.Pattern = "<[^>]*>";
ОчищенныйТекст = RegExp.Replace(ИсходныйТекст, "");
Важно помнить: этот способ вызовет ошибку, если код будет исполняться на сервере под управлением Linux, так как COM-объекты являются частью архитектуры Windows.
Если вам нужно не просто удалить теги, а корректно обработать HTML-сущности (например, заменить на пробел или & на амперсанд), лучше всего использовать встроенный парсер HTML.
Для этого можно создать объект HTMLDocument. Метод GetText (или обращение к свойству innerText) автоматически преобразует спецсимволы в читаемый текст и удалит лишнюю разметку.
// Создание объекта оболочки документа
HTML = Новый COMОбъект("htmlfile");
HTML.open();
HTML.write(ИсходныйТекст);
HTML.close();
// Получение чистого текста
ЧистыйТекст = HTML.body.innerText;
При выборе метода учитывайте следующие советы:
Linux, всегда используйте встроенные функции платформы: СтрЗаменитьПоРегулярномуВыражению или СтрНайтиПоРегулярномуВыражению.HTML содержит вложенные структуры, сложные скрипты (<script>) или стили (<style>), перед удалением тегов очистите текст от содержимого этих блоков, иначе скриптовый код останется в вашем результирующем тексте.<[^>]*> может не захватить комментарии вида <!-- текст -->. Для них лучше предусмотреть отдельный шаблон.Использование современных методов платформы 1С — это залог того, что ваш код будет работать стабильно, быстро и независимо от операционной системы сервера.