diff --git a/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl b/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl
index 9fe6b1081..2431f3273 100644
--- a/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl
+++ b/epf/bddRunner/bddRunner/Ext/ObjectModule.bsl
@@ -2,7 +2,7 @@
Перем СтатусыРезультатаТестирования Экспорт;
Перем ПараметрыОтчетаУФ;
Перем ОтчетВРежимеУФ;
-Перем ЭтоLinux;
+Перем ЭтоLinux Экспорт;
Перем Регулярка;
Перем РазницаВМилисекундахМеждуЮниксИНачалЭпохи;
diff --git "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin"
index 919ad5424..dbd74390b 100644
Binary files "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" and "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.bin" differ
diff --git "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
index d4ff68291..a1a37a306 100644
--- "a/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
+++ "b/epf/bddRunner/bddRunner/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
@@ -3,8 +3,7 @@
Перем ОбъектКонтекстСохраняемый Экспорт;
Перем ЭтоУФ;
-Перем ЭтоLinux;
-
+
Перем ВыполнятьСценарииАсинхронно;
Перем МассивСценариевДляВыполнения;
diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml"
new file mode 100644
index 000000000..e2f3e6ea9
--- /dev/null
+++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml"
@@ -0,0 +1,30 @@
+
+
+
+
+
+ c3831ec8-d8d5-4f93-8a22-f9bfae07327f
+ 29d2f52d-0ed1-4254-a6bc-bbc6bc333ab1
+
+
+ 503de865-4645-4496-b5dd-2e4a76236095
+ 4d213f80-34d7-4f82-80f0-c17b4f80d887
+
+
+
+ Фича_РегулярныеВыражения
+
+
+ ru
+ Фича_РегулярныеВыражения
+
+
+
+ ExternalDataProcessor.Фича_РегулярныеВыражения.Form.Форма
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl"
new file mode 100644
index 000000000..217641d81
--- /dev/null
+++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl"
@@ -0,0 +1,155 @@
+
+#Область Служебные_функции_и_процедуры
+
+// контекст фреймворка Vanessa-Behavior
+Перем Ванесса;
+
+// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария.
+Перем Контекст Экспорт;
+
+// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Behavior.
+Перем КонтекстСохраняемый Экспорт;
+
+// Функция экспортирует список шагов, которые реализованы в данной внешней обработке.
+Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
+ Ванесса = КонтекстФреймворкаBDD;
+
+ ВсеТесты = Новый Массив;
+
+ //описание параметров
+ //Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,ОписаниеШага,ТипШага,Транзакция,Параметр);
+
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" соответствует регулярному выражению ""\d\d\d""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02)","ЯЗапоминаюСтрокуКакПеременную","Когда Я запоминаю строку ""Привет"" как переменную ""ПроверяемаяСтрока""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" соответствует простому шаблону ""*ри*""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяНеСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" не соответствует регулярному выражению ""\d{4}""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяНеСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" не соответствует простому шаблону ""*ДругойТекст*""","","");
+
+ Возврат ВсеТесты;
+КонецФункции
+
+// Служебная функция для подключения библиотеки создания fixtures.
+Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт
+ Возврат ПолучитьМакет(ИмяМакета);
+КонецФункции
+
+#КонецОбласти
+
+
+
+#Область Работа_со_сценариями
+
+// Процедура выполняется перед началом каждого сценария
+Процедура ПередНачаломСценария() Экспорт
+
+КонецПроцедуры
+
+// Процедура выполняется перед окончанием каждого сценария
+Процедура ПередОкончаниемСценария() Экспорт
+
+КонецПроцедуры
+
+#КонецОбласти
+
+
+///////////////////////////////////////////////////
+//Реализация шагов
+///////////////////////////////////////////////////
+
+//Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока"
+//@ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02)
+Процедура ЯЗапоминаюСтрокуКакПеременную(ИсходнаяСтрока, ИмяПеременной) Экспорт
+ Контекст.Вставить(ИмяПеременной, ИсходнаяСтрока);
+КонецПроцедуры
+
+//Тогда переменная "ПроверяемаяСтрока" соответствует регулярному выражению "/d/d/d"
+//@ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02)
+Процедура ПеременнаяСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт
+
+ ПроверяемаяСтрока = "";
+
+ Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка из переменной совпадает с шаблоном регулярного выражения, а это не так
+ |Регулярное выражение %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоИстина();
+КонецПроцедуры
+
+//Тогда переменная "ПроверяемаяСтрока" не соответствует регулярному выражению "\d{4}"
+//@ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02)
+Процедура ПеременнаяНеСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт
+
+ ПроверяемаяСтрока = "";
+
+ Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка не совпадает с шаблоном регулярного выражения, а она совпадает, что неверно
+ |Регулярное выражение %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоЛожь();
+КонецПроцедуры
+
+//Тогда переменная "ПроверяемаяСтрока" соответствует простому шаблону "*ри*"
+//@ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02)
+Процедура ПеременнаяСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт
+
+ ПроверяемаяСтрока = "";
+ Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка совпадает с шаблоном регулярного выражения, а это не так
+ |Шаблон проверки %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоИстина();
+КонецПроцедуры
+
+//Тогда переменная "ПроверяемаяСтрока" не соответствует простому шаблону "*ДругойТекст*"
+//@ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02)
+Процедура ПеременнаяНеСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт
+ ПроверяемаяСтрока = "";
+ Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка не совпадает с простым шаблоном, а она совпадает, что неверно
+ |Шаблон проверки %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоЛожь();
+КонецПроцедуры
+
+Функция ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока)
+
+ РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения");
+ РегулярныеВыражения.Подготовить(ШаблонРегулярки);
+
+ ПроверяемаяСтрока = Контекст[ИмяПеременной];
+
+ Нашли = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока);
+
+ Возврат Нашли;
+КонецФункции
+
+Функция ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока)
+
+ РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения");
+
+ ПроверяемаяСтрока = Контекст[ИмяПеременной];
+
+ Нашли = РегулярныеВыражения.СтрокаСоответствуетШаблону(ПроверяемаяСтрока, ШаблонРегулярки);
+
+ Возврат Нашли;
+КонецФункции
diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
new file mode 100644
index 000000000..cd892735e
--- /dev/null
+++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
new file mode 100644
index 000000000..fc02585eb
--- /dev/null
+++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
@@ -0,0 +1,12 @@
+
+
\ No newline at end of file
diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
new file mode 100644
index 000000000..8fb0fbadd
--- /dev/null
+++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/step_definitions/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
@@ -0,0 +1,176 @@
+
+#Область Служебные_функции_и_процедуры
+
+&НаКлиенте
+// контекст фреймворка Vanessa-Behavior
+Перем Ванесса;
+
+&НаКлиенте
+// Структура, в которой хранится состояние сценария между выполнением шагов. Очищается перед выполнением каждого сценария.
+Перем Контекст Экспорт;
+
+&НаКлиенте
+// Структура, в которой можно хранить служебные данные между запусками сценариев. Существует, пока открыта форма Vanessa-Behavior.
+Перем КонтекстСохраняемый Экспорт;
+
+&НаКлиенте
+// Функция экспортирует список шагов, которые реализованы в данной внешней обработке.
+Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
+ Ванесса = КонтекстФреймворкаBDD;
+
+ ВсеТесты = Новый Массив;
+
+ //описание параметров
+ //Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,ОписаниеШага,ТипШага,Транзакция,Параметр);
+
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" соответствует регулярному выражению ""\d\d\d""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02)","ЯЗапоминаюСтрокуКакПеременную","Когда Я запоминаю строку ""Привет"" как переменную ""ПроверяемаяСтрока""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" соответствует простому шаблону ""*ри*""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02)","ПеременнаяНеСоответствуетРегулярномуВыражению","Тогда переменная ""ПроверяемаяСтрока"" не соответствует регулярному выражению ""\d{4}""","","");
+ Ванесса.ДобавитьШагВМассивТестов(ВсеТесты,"ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02)","ПеременнаяНеСоответствуетПростомуШаблону","Тогда переменная ""ПроверяемаяСтрока"" не соответствует простому шаблону ""*ДругойТекст*""","","");
+
+ Возврат ВсеТесты;
+КонецФункции
+
+&НаСервере
+// Служебная функция.
+Функция ПолучитьМакетСервер(ИмяМакета)
+ ОбъектСервер = РеквизитФормыВЗначение("Объект");
+ Возврат ОбъектСервер.ПолучитьМакет(ИмяМакета);
+КонецФункции
+
+&НаКлиенте
+// Служебная функция для подключения библиотеки создания fixtures.
+Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт
+ Возврат ПолучитьМакетСервер(ИмяМакета);
+КонецФункции
+
+#КонецОбласти
+
+
+
+#Область Работа_со_сценариями
+
+&НаКлиенте
+// Процедура выполняется перед началом каждого сценария
+Процедура ПередНачаломСценария() Экспорт
+
+КонецПроцедуры
+
+&НаКлиенте
+// Процедура выполняется перед окончанием каждого сценария
+Процедура ПередОкончаниемСценария() Экспорт
+
+КонецПроцедуры
+
+#КонецОбласти
+
+
+///////////////////////////////////////////////////
+//Реализация шагов
+///////////////////////////////////////////////////
+
+&НаКлиенте
+//Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока"
+//@ЯЗапоминаюСтрокуКакПеременную(Парам01,Парам02)
+Процедура ЯЗапоминаюСтрокуКакПеременную(ИсходнаяСтрока, ИмяПеременной) Экспорт
+ Контекст.Вставить(ИмяПеременной, ИсходнаяСтрока);
+КонецПроцедуры
+
+&НаКлиенте
+//Тогда переменная "ПроверяемаяСтрока" соответствует регулярному выражению "/d/d/d"
+//@ПеременнаяСоответствуетРегулярномуВыражению(Парам01,Парам02)
+Процедура ПеременнаяСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт
+
+ ПроверяемаяСтрока = "";
+
+ Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка из переменной совпадает с шаблоном регулярного выражения, а это не так
+ |Регулярное выражение %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоИстина();
+КонецПроцедуры
+
+&НаКлиенте
+//Тогда переменная "ПроверяемаяСтрока" не соответствует регулярному выражению "\d{4}"
+//@ПеременнаяНеСоответствуетРегулярномуВыражению(Парам01,Парам02)
+Процедура ПеременнаяНеСоответствуетРегулярномуВыражению(ИмяПеременной, ШаблонРегулярки) Экспорт
+
+ ПроверяемаяСтрока = "";
+
+ Нашли = ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка не совпадает с шаблоном регулярного выражения, а она совпадает, что неверно
+ |Регулярное выражение %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоЛожь();
+КонецПроцедуры
+
+&НаКлиенте
+//Тогда переменная "ПроверяемаяСтрока" соответствует простому шаблону "*ри*"
+//@ПеременнаяСоответствуетПростомуШаблону(Парам01,Парам02)
+Процедура ПеременнаяСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт
+
+ ПроверяемаяСтрока = "";
+ Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка совпадает с шаблоном регулярного выражения, а это не так
+ |Шаблон проверки %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоИстина();
+КонецПроцедуры
+
+&НаКлиенте
+//Тогда переменная "ПроверяемаяСтрока" не соответствует простому шаблону "*ДругойТекст*"
+//@ПеременнаяНеСоответствуетПростомуШаблону(Парам01,Парам02)
+Процедура ПеременнаяНеСоответствуетПростомуШаблону(ИмяПеременной, ШаблонРегулярки) Экспорт
+ ПроверяемаяСтрока = "";
+ Нашли = ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока);
+
+ Ожидаем = Ванесса.Плагин("УтвержденияBDD");
+ Ожидаем.Что(Нашли,
+ СтрШаблон("Ожидали, что проверяемая строка не совпадает с простым шаблоном, а она совпадает, что неверно
+ |Шаблон проверки %1
+ |Имя переменной %2
+ |Проверяемая строка:
+ |%3", ШаблонРегулярки, ИмяПеременной, ПроверяемаяСтрока))
+ .ЭтоЛожь();
+КонецПроцедуры
+
+&НаКлиенте
+Функция ПеременнаяСоответствуетРегулярномуВыражениюВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока)
+
+ РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения");
+ РегулярныеВыражения.Подготовить(ШаблонРегулярки);
+
+ ПроверяемаяСтрока = Контекст[ИмяПеременной];
+
+ Нашли = РегулярныеВыражения.Совпадает(ПроверяемаяСтрока);
+
+ Возврат Нашли;
+КонецФункции
+
+&НаКлиенте
+Функция ПеременнаяСоответствуетПростомуШаблонуВнутр(ИмяПеременной, ШаблонРегулярки, ПроверяемаяСтрока)
+
+ РегулярныеВыражения = Ванесса.Плагин("РегулярныеВыражения");
+
+ ПроверяемаяСтрока = Контекст[ИмяПеременной];
+
+ Нашли = РегулярныеВыражения.СтрокаСоответствуетШаблону(ПроверяемаяСтрока, ШаблонРегулярки);
+
+ Возврат Нашли;
+КонецФункции
diff --git "a/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.feature" "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.feature"
new file mode 100644
index 000000000..fab65344e
--- /dev/null
+++ "b/features/libraries/\320\237\320\273\320\260\320\263\320\270\320\275\321\213/\320\244\320\270\321\207\320\260_\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.feature"
@@ -0,0 +1,24 @@
+# language: ru
+
+@IgnoreOnWeb
+
+Функционал: Регулярные выражения
+ Как Пользователь VB
+ Я хочу выполнять больше различных проверок, используя регулярные выражения
+ Чтобы автоматизировать рутинную деятельность разработчика
+
+Сценарий: Соответствие шаблону
+ Когда Я запоминаю значение выражения "345" в переменную "ПроверяемаяСтрока"
+ Тогда переменная "ПроверяемаяСтрока" соответствует регулярному выражению "\d\d\d"
+
+Сценарий: Соответствие простому шаблону с использованием маски "*", т.е. "любые символы"
+ Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока"
+ Тогда переменная "ПроверяемаяСтрока" соответствует простому шаблону "*ри*"
+
+Сценарий: Несовпадение с шаблоном
+ Когда Я запоминаю значение выражения "345" в переменную "ПроверяемаяСтрока"
+ Тогда переменная "ПроверяемаяСтрока" не соответствует регулярному выражению "\d{4}"
+
+Сценарий: Несовпадение с простым шаблоном с использованием маски "*", т.е. "любые символы"
+ Когда Я запоминаю строку "Привет" как переменную "ПроверяемаяСтрока"
+ Тогда переменная "ПроверяемаяСтрока" не соответствует простому шаблону "*ДругойТекст*"
diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml"
new file mode 100644
index 000000000..e91c9d20f
--- /dev/null
+++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217.xml"
@@ -0,0 +1,30 @@
+
+
+
+
+
+ c3831ec8-d8d5-4f93-8a22-f9bfae07327f
+ 908d0aaf-e4ec-4668-8d14-3e8075d222fd
+
+
+ 85629dd2-6be4-49c6-9a69-13411102aa57
+ 3fdd55c8-e92e-4f99-8b28-3ba8957b50ab
+
+
+
+ РегулярныеВыражения
+
+
+ ru
+ Регулярные выражения
+
+
+
+ ExternalDataProcessor.РегулярныеВыражения.Form.Форма
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl"
new file mode 100644
index 000000000..91f976bd3
--- /dev/null
+++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Ext/ObjectModule.bsl"
@@ -0,0 +1,192 @@
+Перем ПутьКФайлуПолный Экспорт;// в эту переменную будет установлен правильный клиентский путь к текущему файлу
+
+Перем КонтекстЯдра;
+Перем ЭтоLinux;
+
+Перем РегулярноеВыражение;
+
+Перем ТестерЛинукс;
+
+Перем Ожидаем;
+
+// { Plugin interface
+Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт
+ Результат = Новый Структура;
+ Результат.Вставить("Тип", ВозможныеТипыПлагинов.Утилита);
+ Результат.Вставить("Идентификатор", Метаданные().Имя);
+ Результат.Вставить("Представление", "РегулярныеВыражения");
+
+ Возврат Новый ФиксированнаяСтруктура(Результат);
+КонецФункции
+
+Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
+ КонтекстЯдра = КонтекстЯдраПараметр;
+ ЭтоLinux = КонтекстЯдраПараметр.ЭтоLinux;
+КонецПроцедуры
+// } Plugin interface
+
+// { API
+
+// Установить шаблон регулярного выражения
+//
+// Параметры:
+// Шаблон - Строка - шаблон регулярного выражения
+//
+Процедура Подготовить(Знач Шаблон) Экспорт
+ Если ЭтоLinux Тогда
+ ПодготовитьШаблонRexExpLinux(Шаблон);
+ Иначе
+ Если РегулярноеВыражение = Неопределено Тогда
+ Попытка
+ РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp");
+ Исключение
+ ВызватьИсключение "Не удалось создать COMОбъект - VBScript.RegExp";
+ КонецПопытки;
+ КонецЕсли;
+
+ РегулярноеВыражение.Global = Истина;
+ РегулярноеВыражение.Pattern = Шаблон;
+
+ КонецЕсли;
+КонецПроцедуры
+
+// Проверяет строку на соответствие подготовленному регулярному выражению
+//
+// Параметры:
+// ПроверяемаяСтрока - -
+//
+// Возвращаемое значение:
+// Булево - соответствует или нет
+//
+Функция Совпадает(Знач ПроверяемаяСтрока) Экспорт
+ ПроверитьПодготовленность();
+ Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока);
+КонецФункции
+
+// Позволяет проверить соответствие строки "ПроверяемаяСтрока" шаблону "Шаблон"
+// при этом подстрока "Шаблон" может содержать символы *, который означает "любые символы"
+// например СтрокаСоответствуетШаблону("Привет","*вет")
+//
+// Параметры:
+// ПроверяемаяСтрока - Строка -
+// Шаблон - Строка -
+//
+// Возвращаемое значение:
+// Булево - соответствует или нет
+//
+Функция СтрокаСоответствуетШаблону(Знач ПроверяемаяСтрока, Знач Шаблон = "") Экспорт
+
+ Если ЗначениеЗаполнено(Шаблон) Тогда
+ Шаблон = ПодготовитьШаблонКИспользованиюВРегулярке(Шаблон);
+ Если Не ЭтоLinux Тогда
+ //для VBScript.RegExp явно указываем что есть начало и конец строки
+ Шаблон = "^" + Шаблон + "$";
+ КонецЕсли;
+
+ Подготовить(Шаблон);
+ КонецЕсли;
+
+ ПроверитьПодготовленность();
+
+ Если ЭтоLinux Тогда
+ Возврат ПроверитьСтрокуRexExpLinux(ПроверяемаяСтрока);
+ Иначе
+ Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока);
+ КонецЕсли;
+КонецФункции
+
+// Подготовить шаблон к использованию в регулярке путем экранирования служебных символов
+// Важно: Символ * в шаблоне трактуется как выражение .+ (любой символ)
+//
+// Параметры:
+// Шаблон - Строка - строка регулярного выражения без экранирования
+//
+// Возвращаемое значение:
+// Строка - подготовленный шаблон регулярного выражения с добавлением экранирования и заменой *
+//
+Функция ПодготовитьШаблонКИспользованиюВРегулярке(Знач Шаблон) Экспорт
+
+ // Экранируем все, кроме звездочки. Ее будем трактовать по-своему.
+ СпецСимволы = Новый Массив;
+ СпецСимволы.Добавить("\");
+ СпецСимволы.Добавить("^");
+ СпецСимволы.Добавить("$");
+ СпецСимволы.Добавить("(");
+ СпецСимволы.Добавить(")");
+ СпецСимволы.Добавить("<");
+ СпецСимволы.Добавить("[");
+ СпецСимволы.Добавить("]");
+ СпецСимволы.Добавить("{");
+ СпецСимволы.Добавить("}");
+ СпецСимволы.Добавить("|");
+ СпецСимволы.Добавить(">");
+ СпецСимволы.Добавить(".");
+ СпецСимволы.Добавить("+");
+ СпецСимволы.Добавить("?");
+
+ Для Каждого СпецСимвол Из СпецСимволы Цикл
+ Шаблон = СтрЗаменить(Шаблон, СпецСимвол, "\" + СпецСимвол);
+ КонецЦикла;
+
+ // Трактуем * по-нашему.
+ Шаблон = СтрЗаменить(Шаблон, "*", ".+");
+
+ Возврат Шаблон;
+
+КонецФункции
+
+// } API
+
+// { Helpers
+
+Процедура ПроверитьПодготовленность()
+ Если ЭтоLinux Тогда
+ Значение = ТестерЛинукс;
+ Иначе
+ Значение = РегулярноеВыражение;
+ КонецЕсли;
+ Ожидаем().Что(Значение <> Неопределено,
+ "Ожидали, что регулярное выражение подготовлено, а это не так")
+ .ЭтоИстина();
+КонецПроцедуры
+
+//взято из https://infostart.ru/public/464971/
+Функция ПроверитьСтрокуRexExpLinux(Знач Строка)
+
+ Попытка
+ ТестерЛинукс.TestItem = Строка;
+ Возврат Истина
+ Исключение
+ Возврат Ложь
+ КонецПопытки;
+КонецФункции
+
+//взято из https://infostart.ru/public/464971/
+Функция ПодготовитьШаблонRexExpLinux(Знач Шаблон)
+ Чтение = Новый ЧтениеXML;
+ Чтение.УстановитьСтроку(
+ "
+ |
+ |
+ |" + Шаблон + "
+ |
+ |
+ |
+ |
+ |
+ |");
+
+ Модель = ФабрикаXDTO.ПрочитатьXML(Чтение);
+ МояФабрикаXDTO = Новый ФабрикаXDTO(Модель);
+ Пакет = МояФабрикаXDTO.Пакеты.Получить("sample-my-package");
+ ТестерЛинукс = МояФабрикаXDTO.Создать(Пакет.Получить("TestObj"));
+
+ Возврат ТестерЛинукс;
+КонецФункции
+
+Функция Ожидаем()
+ Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD");
+ Возврат Ожидаем;
+КонецФункции
+
+// } Helpers
diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
new file mode 100644
index 000000000..30f4aedce
--- /dev/null
+++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260.xml"
@@ -0,0 +1,22 @@
+
+
+
+
\ No newline at end of file
diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
new file mode 100644
index 000000000..41cf6ed38
--- /dev/null
+++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form.xml"
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git "a/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
new file mode 100644
index 000000000..006d451aa
--- /dev/null
+++ "b/plugins/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/\320\240\320\265\320\263\321\203\320\273\321\217\321\200\320\275\321\213\320\265\320\222\321\213\321\200\320\260\320\266\320\265\320\275\320\270\321\217/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl"
@@ -0,0 +1,204 @@
+&НаКлиенте
+Перем ПутьКФайлуПолный Экспорт;// в эту переменную будет установлен правильный клиентский путь к текущему файлу
+
+&НаКлиенте
+Перем ЭтоLinux;
+
+&НаКлиенте
+Перем РегулярноеВыражение;
+
+&НаКлиенте
+Перем ТестерЛинукс;
+
+&НаКлиенте
+Перем Ожидаем;
+
+// { Plugin interface
+&НаКлиенте
+Функция ОписаниеПлагина(ВозможныеТипыПлагинов) Экспорт
+ Возврат ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов);
+КонецФункции
+
+&НаКлиенте
+Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
+ ЭтоLinux = КонтекстЯдраПараметр.ЭтоLinux;
+ Ожидаем = КонтекстЯдраПараметр.Плагин("УтвержденияBDD");
+КонецПроцедуры
+
+&НаСервере
+Функция ОписаниеПлагинаНаСервере(ВозможныеТипыПлагинов)
+ Возврат ЭтотОбъектНаСервере().ОписаниеПлагина(ВозможныеТипыПлагинов);
+КонецФункции
+// } Plugin interface
+
+// { API
+
+// Установить шаблон регулярного выражения
+//
+// Параметры:
+// Шаблон - Строка - шаблон регулярного выражения
+//
+&НаКлиенте
+Процедура Подготовить(Знач Шаблон) Экспорт
+ Если ЭтоLinux Тогда
+ ПодготовитьШаблонRexExpLinux(Шаблон);
+ Иначе
+ Если РегулярноеВыражение = Неопределено Тогда
+ Попытка
+ РегулярноеВыражение = Новый COMОбъект("VBScript.RegExp");
+ Исключение
+ ВызватьИсключение "Не удалось создать COMОбъект - VBScript.RegExp";
+ КонецПопытки;
+ КонецЕсли;
+
+ РегулярноеВыражение.Global = Истина;
+ РегулярноеВыражение.Pattern = Шаблон;
+
+ КонецЕсли;
+КонецПроцедуры
+
+// Проверяет строку на соответствие подготовленному регулярному выражению
+//
+// Параметры:
+// ПроверяемаяСтрока - -
+//
+// Возвращаемое значение:
+// Булево - соответствует или нет
+//
+&НаКлиенте
+Функция Совпадает(Знач ПроверяемаяСтрока) Экспорт
+ ПроверитьПодготовленность();
+ Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока);
+КонецФункции
+
+// Позволяет проверить соответствие строки "ПроверяемаяСтрока" шаблону "Шаблон"
+// при этом подстрока "Шаблон" может содержать символы *, который означает "любые символы"
+// например СтрокаСоответствуетШаблону("Привет","*вет")
+//
+// Параметры:
+// ПроверяемаяСтрока - Строка -
+// Шаблон - Строка -
+//
+// Возвращаемое значение:
+// Булево - соответствует или нет
+//
+&НаКлиенте
+Функция СтрокаСоответствуетШаблону(Знач ПроверяемаяСтрока, Знач Шаблон = "") Экспорт
+
+ Если ЗначениеЗаполнено(Шаблон) Тогда
+ Шаблон = ПодготовитьШаблонКИспользованиюВРегулярке(Шаблон);
+ Если Не ЭтоLinux Тогда
+ //для VBScript.RegExp явно указываем что есть начало и конец строки
+ Шаблон = "^" + Шаблон + "$";
+ КонецЕсли;
+
+ Подготовить(Шаблон);
+ КонецЕсли;
+
+ ПроверитьПодготовленность();
+
+ Если ЭтоLinux Тогда
+ Возврат ПроверитьСтрокуRexExpLinux(ПроверяемаяСтрока);
+ Иначе
+ Возврат РегулярноеВыражение.Test(ПроверяемаяСтрока);
+ КонецЕсли;
+КонецФункции
+
+// Подготовить шаблон к использованию в регулярке путем экранирования служебных символов
+// Важно: Символ * в шаблоне трактуется как выражение .+ (любой символ)
+//
+// Параметры:
+// Шаблон - Строка - строка регулярного выражения без экранирования
+//
+// Возвращаемое значение:
+// Строка - подготовленный шаблон регулярного выражения с добавлением экранирования и заменой *
+//
+&НаКлиенте
+Функция ПодготовитьШаблонКИспользованиюВРегулярке(Знач Шаблон) Экспорт
+
+ // Экранируем все, кроме звездочки. Ее будем трактовать по-своему.
+ СпецСимволы = Новый Массив;
+ СпецСимволы.Добавить("\");
+ СпецСимволы.Добавить("^");
+ СпецСимволы.Добавить("$");
+ СпецСимволы.Добавить("(");
+ СпецСимволы.Добавить(")");
+ СпецСимволы.Добавить("<");
+ СпецСимволы.Добавить("[");
+ СпецСимволы.Добавить("]");
+ СпецСимволы.Добавить("{");
+ СпецСимволы.Добавить("}");
+ СпецСимволы.Добавить("|");
+ СпецСимволы.Добавить(">");
+ СпецСимволы.Добавить(".");
+ СпецСимволы.Добавить("+");
+ СпецСимволы.Добавить("?");
+
+ Для Каждого СпецСимвол Из СпецСимволы Цикл
+ Шаблон = СтрЗаменить(Шаблон, СпецСимвол, "\" + СпецСимвол);
+ КонецЦикла;
+
+ // Трактуем * по-нашему.
+ Шаблон = СтрЗаменить(Шаблон, "*", ".+");
+
+ Возврат Шаблон;
+
+КонецФункции
+
+// } API
+
+// { Helpers
+&НаСервере
+Функция ЭтотОбъектНаСервере()
+ Возврат РеквизитФормыВЗначение("Объект");
+КонецФункции
+
+&НаКлиенте
+Процедура ПроверитьПодготовленность()
+ Если ЭтоLinux Тогда
+ Значение = ТестерЛинукс;
+ Иначе
+ Значение = РегулярноеВыражение;
+ КонецЕсли;
+ Ожидаем.Что(Значение <> Неопределено,
+ "Ожидали, что регулярное выражение подготовлено, а это не так")
+ .ЭтоИстина();
+КонецПроцедуры
+
+//взято из https://infostart.ru/public/464971/
+&НаКлиенте
+Функция ПроверитьСтрокуRexExpLinux(Знач Строка)
+
+ Попытка
+ ТестерЛинукс.TestItem = Строка;
+ Возврат Истина
+ Исключение
+ Возврат Ложь
+ КонецПопытки;
+КонецФункции
+
+//взято из https://infostart.ru/public/464971/
+&НаКлиенте
+Функция ПодготовитьШаблонRexExpLinux(Знач Шаблон)
+ Чтение = Новый ЧтениеXML;
+ Чтение.УстановитьСтроку(
+ "
+ |
+ |
+ |" + Шаблон + "
+ |
+ |
+ |
+ |
+ |
+ |");
+
+ Модель = ФабрикаXDTO.ПрочитатьXML(Чтение);
+ МояФабрикаXDTO = Новый ФабрикаXDTO(Модель);
+ Пакет = МояФабрикаXDTO.Пакеты.Получить("sample-my-package");
+ ТестерЛинукс = МояФабрикаXDTO.Создать(Пакет.Получить("TestObj"));
+
+ Возврат ТестерЛинукс;
+КонецФункции
+
+// } Helpers