В выражении на встроенном языке нужно найти неявное объявление всех переменных, при этом исключить комментарии.
Пример:
Переменная1 = Новый ТаблицаЗначений;
//Переменная2 = Новый СписокЗначений;
Переменная3 = Новый Структура; Переменная4 = Новый Массив;
//Переменная5 = Новый ДеревоЗначений;
Должно получиться:
Переменная1
Переменная3
Переменная4
оо.. похвальная штука.. а реально эти вещи помогают разработке? я раньше довольном большим числом плагинов к VisualStudio пользовался, тут как-то удручает что нельзя в платформу их встроить.
Одним регулярным выражением это будет непросто.
(?=.*;).*?.(?:\=) выловит переменный по синтаксису (с учетом, что должна быть точка с запятой между операторами
далее удалить комментарии, которые найдет (?:\/).*
настройки парсера:
глобальный,
многострочный,
без учета регистра
(2) fzt, желательно реализовать это именно с помощью одного выражения. При этом строки переменных должны удовлетворять требованиям к именам переменных 1С, а именно - начинаться с буквы или знака подчеркивания, не содержать специальные символы.
Например, такое выражение (?:[^//].*\n|\n|\s^|$|\b)[_ЁА-ЯA-Z][_ЁА-ЯA-Z\d]*(?=\s*=) выдает мне почти требуемый результат, но включает в себя и символы перевода строк.
короче по моему без lookbehind никак нельзя, нужен Perl парсер, или таки предобрабоотка текста, по вырезанию нахрен оттуда комментов.
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = Истина; //Игнорировать регистр
RegExp.Global = Истина; //Поиск всех вхождений шаблона
RegExp.MultiLine = Ложь; //Многострочный режим
RegExp.Pattern = "([_а-яА-Я0-9]+)(\s?=\s?.+);?";
Matches=RegExp.Execute("При мер = ап
|Переменная1=Новый ТаблицаЗначений;
|//Переменная2=Новый СписокЗначений; //ojkj
|Переменная3=Новый Структура; Переменная4 = Новый Массив;
|Переменная6=Новый Структура; //Переменная5 = Новый ДеревоЗначений;");
ЧислоВхождений=Matches.Count();
Если ЧислоВхождений>0 Тогда
Для к = 0 По ЧислоВхождений-1 Цикл
Сообщить(Matches.Item(к).SubMatches.item(0));
КонецЦикла;
Иначе
Сообщить("Вхождений шаблона не найдено");
КонецЕсли;
Показать
Я запарился по самое не могу. Не сталкивался с тем, что RegExp VBS поддерживате не все операторы. Я теперь хочу компоненту которая поддерживает все.
Кстати зачем тебе переменные? что пишеш то?
(12) fzt, хочу написать небольшую контекстную подсказку для КД 2.1, которая была бы попроще чем http://infostart.ru/public/72813/ и в виде одной обработки.
В принципе прототип есть, но хотелось бы реализовать более оптимальный разбор текста. Кстати, идея о "вырезать нахрен оттуда комментарии" мне нравится. Спасибо, если больше никаких вариантов не будет, остановлюсь на ней.
(15) tomvlad, нужна компонтента, поддерживающая все операторы регулярок.. вроде есть некая "библиотека Константина Ступника бля FAR" как плагин, я не нашел. В теории они есть http://www.regular-expressions.info/lookaround.html Но Майкрософт же самые умные.. 640кб всем хватило, ну и без регулярок обойдутся.
оо.. похвальная штука.. а реально эти вещи помогают разработке? я раньше довольном большим числом плагинов к VisualStudio пользовался, тут как-то удручает что нельзя в платформу их встроить.
Пасиба.
Понятно. В целом разумеется комменты хочется оставить.
Есть штука которая сделает меня счастливым кодером. Аналог окна code definition в Visual Studio.
Суть:
При наведение текстовой каретки на любую переменную или функцию, в другом окне (у меня это второй монитор допустим) показывается код, где эта переменная объявлена или реализация этой функции. Безумно упрощает работу программиста. Всегда под рукой требуемые параметры функции. Я бы сам реализовал, но пока не довелось работать с окнами платформы.