😯 В конце-концов вендор сдался и добавил нам регулярки. Или не сдался? Такое ощущение, что добавили их точно так же, как ранее добавляли для нас "реактивность" с целью не превращать код в спагетти из обработчиков оповещений (для тех, кто не из мира 1С, уточню - очень хреново добавили).
👨💻 Сегодня у меня подвернулась задачка по поиску фрагментов в тексте по определенному образцу. Пора протестировать новые возможности!
🤝 Открываю справку в EDT, где я сейчас большую часть времени разрабатываю:
Method name: StrFindAllByRegularExpression
Syntax: StrFindAllByRegularExpression(String, MultilineSearch)
Description: Finds all regular expression occurrences in the source string.
Return value type: •Array
Return value description: Array of elements of the ResultOfSearchByRegularExpression type.
Parameters:
•String (Required). Type: String. Description: Source string.
•MultilineSearch (Not required). Type: Boolean. Description: True. Multiline search is performed...
⛔️ Что? А куда саму регулярку передавать???
🛠 Ладно, всем известно, что в EDT Справка по платформе 1С просто для галочки и ею абсолютно никто не пользуется. Делаю как и все мои коллеги - запускаю Конфигуратор и смотрю уже в его справке:
StrFindAllByRegularExpression
Syntax: StrFindAllByRegularExpression(<String>, <MultilineSearch>, <IgnoreCase>, <MultilineSearch>)
Parameters:
<String> (required) Type: String. Source string.
<MultilineSearch> (required) Type: String. Regular expression.
<IgnoreCase> (optional) Type: Boolean. True - don't match case, False - match case.
<MultilineSearch> (optional) Type: Boolean. True. Multiline search is performed. In a regular expression template
🤨 Получше, но все еще не имеет смысла - нет параметра для паттерна, а параметр построчной работы с текстом почему-то указан дважды...
✔️ Как мы знаем, в C# и в ряде других языков для поиска по регулярке используется функция, где первый параметр Текст, а второй - сама регулярка (кстати, в PHP, Python и Go - наоборот). Так же именно такая последовательность параметров в старой функции поиска по подстроке. В общем, я попробовал вторым параметром передать свой паттерн и успешно получил требуемый массив вхождений образца!
ℹ️ Кстати, подобной чехарды нет в описании функций замены StrReplaceByRegularExpression() и проверки на подобие StrLikeByRegularExpression(). Все нормально описано и в Конфигураторе, и в EDT. Даже имеются примеры применения.
❗️ Но, если бы все проблемы были только в кривой справке, я бы даже не стал начинать писать эту заметку. Оказывается, что ни одна из новых функций не работает на клиенте! Только серверные вызовы 🧐
Т.е. платформа как бы умеет теперь работать с регулярками. Но, если нам нужно анализировать тексты в файлах на клиенте или нужно выполнять парсинг веб-страниц именно на стороне пользователя, то как и прежде требуется использовать сторонние инструменты. Кря 🦆