Имя: Пароль:
1C
1С v8
Доступ к объекту window ВебКлиента
,
0 lufton
 
06.12.20
23:14
Доброго времени суток! Есть необходимость использовать регулярные выражения в 1С на ВебКлиенте. Есть замечательная компонента, но она не устанавливается в ВебКлиент.
Возникла идея, а что если использовать методы самого браузера? Т.е. каким-то образом обратиться к объекту window открытого окна с запущенным ВебКлиентом.
Знаю, что можно использовать ПолеHTMLДокумента, но у меня задача: регулярки в общем модуле, т.е. без форм.
1 acht
 
06.12.20
23:39
(0) > окна с запущенным ВебКлиентом.
...
> в общем модуле, т.е. без форм.

Чувстуешь противоречие, не?
2 lufton
 
07.12.20
00:27
(1) да, чувствую ) что ж делать-то?
3 acht
 
07.12.20
00:42
(2) Зависит о того, что тебе важней - общий модуль без форм или таки формы на клиенте.
4 DES
 
07.12.20
00:58
5 acht
 
07.12.20
01:33
(4) И чо там у тебя получилось?
6 lufton
 
07.12.20
02:35
Пока что вот так сделал, работает хотя бы в IE:
Функция RegEx(РегулярноеВыражение = "", ИгнорироватьРегистр = Истина, ВсеСовпадения = Истина) Экспорт
    #Если ВебКлиент Тогда
        RegEx = Новый COMОбъект("VBScript.RegExp");
        RegEx.Pattern = РегулярноеВыражение;
        RegEx.Global = ВсеСовпадения;
        RegEx.IgnoreCase = ИгнорироватьРегистр;
    #Иначе
        ПодключитьВнешнююКомпоненту("ОбщийМакет.НП_RegEx","НП_RegEx", ТипВнешнейКомпоненты.Native);
        RegEx = Новый("AddIn.НП_RegEx.RegEx");
        RegEx.Шаблон = РегулярноеВыражение;
        RegEx.ВсеСовпадения = ВсеСовпадения;
        RegEx.ИгнорироватьРегистр = ИгнорироватьРегистр;
    #КонецЕсли
    
    Возврат RegEx;
КонецФункции

Функция Совпадает(Текст, РегулярноеВыражение, ИгнорироватьРегистр = Истина, ВсеСовпадения = Истина) Экспорт
    RegEx = RegEx(РегулярноеВыражение, ИгнорироватьРегистр, ВсеСовпадения);

    #Если ВебКлиент Тогда
        Возврат RegEx.Test(Текст);
    #Иначе
        Возврат RegEx.Совпадает(Текст);
    #КонецЕсли
КонецФункции

Функция Заменить(Текст, РегулярноеВыражение, Замена, ИгнорироватьРегистр = Истина, ВсеСовпадения = Истина) Экспорт
    RegEx = RegEx(РегулярноеВыражение, ИгнорироватьРегистр, ВсеСовпадения);

    #Если ВебКлиент Тогда
        Возврат RegEx.Replace(Текст, Замена);
    #Иначе
        Возврат RegEx.Заменить(Текст, , Замена);
    #КонецЕсли
КонецФункции

Может кому-то пригодится, но хотелось бы полноценные регулярки в более продвинутых браузерах.
7 arsik
 
гуру
07.12.20
09:00
(0) Регулярки настолько хороши, что необходимы и их ничего не может заменить? Ну бред же.
8 polosov
 
07.12.20
09:37
(7) Да, регулярки настолько хороши.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс