Coder Social home page Coder Social logo

Планируется ли делать аналог свойства SubMatches в VBScript.RegExp в результате поиска совпадений? about regex1caddin HOT 11 CLOSED

alexkmbk avatar alexkmbk commented on August 14, 2024
Планируется ли делать аналог свойства SubMatches в VBScript.RegExp в результате поиска совпадений?

from regex1caddin.

Comments (11)

alexkmbk avatar alexkmbk commented on August 14, 2024 2

@LevkinSergey
Большое спасибо за предложения!

Мне ближе второй вариант, я бы сделал так:

  1. чтобы не ломать совместимость с сущетсвующим поведением, добавить признак ИерархическийОбходРезультатов, со значением по умолчанию Ложь.

Если ИерархическийОбходРезультатов = Истина, тогда метод Следующий() будет обходить только верхний уровень, то есть целиком найденную строку, без вложенных групп.

  1. добавить метод КоличествоВложенныхГрупп(), который будет возвращать количество групп в результатах запроса (количество всегда фиксировано для заданного шаблона).

  2. добавить метод ПолучитьПодгруппу(ИндексПодгруппы), который будет возвращать значение найденной группы по индексу.

from regex1caddin.

LevkinSergey avatar LevkinSergey commented on August 14, 2024 1

Но принимаются предложения по расширению функционала для решения проблемы обхода групп результатов поиска.

У меня две идеи. Вторая на мой взгляд проще в использовании.

Первый вариант. Реализовать метод Выбрать(), который будет производить выборку в текущей группе. И обходить группу уже существующим методов следующий(). На 1С код по обходу примерно следующий будет

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)");

//Обходим MatchCollection
Пока Рег.Следующий() Цикл
ТекстMatch=Рег.ТекущееЗначение;

 //Обходим SubMatches
Рег.Выбрать();
Пока Рег.Следующий() Цикл
 ТекстSubMatch=Рег.ТекущееЗначение;
КонецЦикла;

КонецЦикла;

Второй вариант. Реализуем еще один метод СледующийПодчиненный(), Который будет обходить коллекцию SubMatches. Код в 1С по обходу примерно следующий

Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)");

//Обходим MatchCollection
Пока Рег.Следующий() Цикл
ТекстMatch=Рег.ТекущееЗначение;

 //Обходим SubMatches
Пока Рег.СледующийПодчиненный() Цикл
 ТекстSubMatch=Рег.ТекущееЗначение;
КонецЦикла;

КонецЦикла;

from regex1caddin.

alexkmbk avatar alexkmbk commented on August 14, 2024

Точно в таком виде не планируется, поскольку есть ограничение со стороны протокола NativeAPI на то, какие типы значений может возвращать внешняя компонента. Но принимаются предложения по расширению функционала для решения проблемы обхода групп результатов поиска.

Вот здесь уже поднимали вопрос по этой проблеме - http://forum.infostart.ru/forum28/topic203542/message2261568/#message2261568

from regex1caddin.

LevkinSergey avatar LevkinSergey commented on August 14, 2024

так даже лучше получается.
Только один вопрос.
После позиционирования на подгруппе методом ПолучитьПодгруппу(ИндексПодгруппы), можно ли будет обойти ее вхождения с помощью метода Следующий()?

from regex1caddin.

alexkmbk avatar alexkmbk commented on August 14, 2024

так даже лучше получается.
Только один вопрос.
После позиционирования на подгруппе методом ПолучитьПодгруппу(ИндексПодгруппы), можно ли будет обойти ее вхождения с помощью метода Следующий()?

Метод ПолучитьПодгруппу будет возвращать само строковое значение найденной подгруппы. То есть это не позиционирование, а именно получение значения.

Например:

Рег.ИерархическийОбходРезультатов = Истина;
Рег.НайтиСовпадения("Hello world", "([A-Za-z]+)\s+([a-z]+)");

Сообщить( Рег.Количество()); // 1 - всего один результат, а не 3 
Сообщить( Рег.КоличествоВложенныхГрупп()); // 2 - две подгруппы (submatches)

//Обходим MatchCollection
Пока Рег.Следующий() Цикл
Сообщить(Рег.ТекущееЗначение); // Hello world
Сообщить(Рег.ПолучитьПодгруппу(0)); // Hello
Сообщить(Рег.ПолучитьПодгруппу(1)); // world
КонецЦикла;

from regex1caddin.

LevkinSergey avatar LevkinSergey commented on August 14, 2024

понял. То что нужно.

from regex1caddin.

alexkmbk avatar alexkmbk commented on August 14, 2024

@LevkinSergey
Выложил тестовую сборку, пока только для Windows и Linux.

Реализовал новый функционал по описанной ранее схеме, за исключением добавления параметра ИерархическийОбходРезультатов . Его добавлять не стал, вместо этого, добавил этот признак третьим параметром в методе НайтиСовпадения / Matches. По умолчанию равен Ложь, то есть сохраняется совместимость поведения с предыдущими версиями.

from regex1caddin.

LevkinSergey avatar LevkinSergey commented on August 14, 2024

будет ли сборка для браузеров 11-й версии в ближайшее время?

from regex1caddin.

alexkmbk avatar alexkmbk commented on August 14, 2024

будет ли сборка для браузеров 11-й версии в ближайшее время?

В ближайшее время собрать к сожалению нет времени.

from regex1caddin.

alexkmbk avatar alexkmbk commented on August 14, 2024

@LevkinSergey

будет ли сборка для браузеров 11-й версии в ближайшее время?

Добавлена сборка для веб браузера Google Chrome под Windows - https://github.com/alexkmbk/RegEx1CAddin/releases/tag/11.6

from regex1caddin.

LevkinSergey avatar LevkinSergey commented on August 14, 2024

Вроде работает. Спасибо.

Добавил новые методы и описал наконец подсистему, основанную на вашей компоненте
https://github.com/cpr1c/RegEx1C_cfe

from regex1caddin.

Related Issues (19)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.