Все разработчики рано или поздно сталкиваются с регулярными выражениями. Практически в 100% случаев нам совершенно не нравится их составлять, считая это побочной работой, не связанной с программированием.

Большинство из нас, впервые столкнувшись с данной проблемой, начинают забивать в поисковых системах что-то типа: «regexp online generator» и к своему великому сожалению осознают что гугл сломался все результаты в поиске являются сервисами для проверки корректности уже составленного регулярного выражения (или я плохо гуглил).

А как же составить это самое регулярное выражение?


image

До недавнего времени существовало 2 ответа на этот вопрос:

  1. Изучить документацию по регулярным выражениям и составить регулярку самому
  2. Попросить кого-то более опытного сделать это за вас

Теперь, после нескольких месяцев разработки, рад представить и 3-й ответ:

» Генератор регулярных выражений

История


Давным давно, в одном проекте пришел довольно интересный и сложный запрос от внутренних пользователей. Персоналу технической поддержки нужно было самим задавать правила валидации для определенных полей, разным пользователям. Правила должны были часто и очень оперативно изменяться.

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

Но эта проблема его очень сильно зацепила и вот теперь, наконец, он рад представить вам плоды своих трудов.

Начнем


Для начала решил сделать веб-сервис. Хотелось сделать максимально просто (для более широкого круга людей), чтобы своё правило для валидации смогли составить не только программисты, но и люди которые далеки от программирования (модераторы/администраторы).

Вот сам интерфейс:



Как и ожидалось, новому пользователю вообще ничего непонятно и поэтому пришлось разработать вводный интерактивный курс:


Всегда выступаю против модальных окон и попапов, но в этом случае мне кажется их все же целособразно использовать. Можно назвать это «приветственным сообщением».

А вот и сам интерактивный курс, точнее его часть:



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

А что же насчет функционала?


Первое что бросается в глаза — это «Примеры» и сделано это неспроста. Для начала, я настоятельно рекоммендую выбрать наиболее близкий для вашей задачи пример. Вы можете просто переключиться между некорректным и корректным вариантом для более простого понимания примеров. Затем можете изменить выбранный вами пример так, как сами пожелаете. Со временем список примеров будет расширяться:


Далее идет то, ради чего это всё и затевалось — сгенерированное Регулярное Выражение:



Здесь хотелось бы немного остановиться и рассказать подробнее.

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

Еще хотелось бы рассказать о возможностях. На данный момент можно создавать регулярку с группами/подгруппами, определять опциональные части (не обязательные), указывать конкретные символы (у остальных будет определяться тип), указать тип — «любой символ» и блокировать определенные символы в конкретной части регулярки. Вы можете довольно просто создать регулярку не только для слова, но и для словосочетания и даже предложения. Доступна генерация регулярок как на латинице и так на кириллице (по отдельности и вместе). По мере добавления дополнительных локализаций интерфейса, планируется поддержка регулярок и для других письменностей.

Кстати, не пугайтесь что регулярное выражение всегда красного цвета. Это не символизирует ошибку, а сделано лишь для того, чтобы акцентировать ваше внимание на этой крайне важной информации.

Далее по порядку идет «Тестовое поле»

Здесь происходит проверка введенного тестового значения на соответствие сгенерированному регулярному выражению. И происходит она «на лету». Ничего нажимать не нужно. Тем самым вы можете гораздо быстрее и удобнее проверить множество вариантов.

Под полем ввода отображается описание автоматически сгенерированного правила.

Есть вариант с описанием правила в виде ошибки, когда введенное тестовое значение не соответствует сгенерированному правилу/регулярке:



На данном примере видно как срабатывает проверка на заблокированные символы:

  • "@" до второй "@";
  • "--" в любой части имени домена второго уровня;
  • "-" в самом конце домена второго уровня, непослредственно перед символом ".";

Описание заблокированных символов в правиле отображается не очень понятно. Чуть позже оно будет приведено к такому же виду как и описание основной части правила.

Также есть вариант с описанием правила в отдельном блоке, когда введенное тестовое значение соответствует сгенерированному правилу/регулярке:



Хотелось бы разъяснить значение цветов с частями правила:

  1. зеленый — правильно
  2. желтый — опционально
  3. красный — некорректно

Сгенерированное регулярное выражение может иметь не только обязательные части, но также и опциональные. Хочу также отметить, что автоматическое описание правила делалось именно для будущего плагина, но отлично показало себя и в данном веб-сервисе.

Ядро (UI)




Вот и наконец мы добрались до последнего блока по порядку, но не по значению. Я лично считаю этот блок — ядром всего сервиса. Именно здесь Генератор получает все необходимые входные данные, которые впоследствии обрабатывает и выдает уже готовый результат. Кстати, вся логика реализована только на клиенте. Веб сервис вообще не имеет серверного кода.

Вначале крайне важно понять что машина не умеет читать мысли должна получить хоть какую-то информацию, чтобы проанализировать ее и выдать хоть какой-то результат. Чем правильней и лаконичнее будут примеры, тем правильней и лаконичнее будет результат. Порядок примеров абсолютно ни на что не влияет.

Здесь можно очень долго и нудно рассказывать что и как нужно вводить, но мне кажется это будет намного проще понять с помощью примеров, которых там довольно много. И вообще, материала с описанием как и что работает хватит еще на одну большую статью.

А ты не забыл сохраниться?


После того, как мы нажали кнопку «Генерировать», у нас сгенерировалось регулярное выражение. Теперь мы можем сохранить его. На всякий случай хочу уточнить что сохраняется оно только в памяти браузера (localstorage).

При нажатии на кнопку «Сохранить» появляется диалоговое окно:


Вы можете вручную ввести описание для правила или переключиться на автоматическое описание как в примере ниже. Также вам нужно ввести название для правила:


Этот функционал был разработан с расчетом на будущий плагин, но пригодился и в данном веб-сервисе.

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

Дополнительные возможности


Я расположил их по приоритету:

  1. Автоматическое сохранение данных в Url параметры. И происходит это сразу же после нажатия на кнопку «Генерировать», либо при переключении примеров или сохраненных правил. Вы можете скинуть кому-то ссылку и при открытии страницы другой пользователь увидит именно то, что вы вводили раннее. Это довольно удобно.

  2. Полная локализация всего контента. Существующие модули локализации мне сильно не нравились, поэтому ваш покорный слуга создал свой велосипед очень простой модуль. Всего десяток строк кода. Выбранный язык cчитывается из Url и записывается в Url, сохраняется в Localstorage. Особенно приятно добавлять новые языки, т.к. текст берется только из одного очень простого JSON файла для соответствующего языка. Отдал файлик переводчикам — получил еще один язык.

  3. Извещение о новой версии приложения. Данный веб-сервис — это одностраничное веб приложение (буквально). Из личного опыта знаю что пользователь может месяцами не перезагружать одностраничное приложение и это как раз правильно. Но что делать если вышла новая версия? Как известить об этом пользователя? — Очень просто. Был разработан модуль, который опрашивает сохраненный JSON файл с заданным интервалом времени и как только записанная новая версия не соответствует предыдущей — показывается вот такое извещение:



Технологии


Вот основной стек технологий с помощью которого удалось всё это реализовать:

  • TypeScript 2.0 + SystemJS
  • Angular 1.5 (с компонентами)
  • Angular-Material 1.x
  • IntroJS

Код написан в полном Angular 2 Code Style (даже с декораторами), что в будущем позволит очень просто мигрировать (жду только Material2).

Заключение


В дальнейших планах — сделать полноценный плагин, который позволит задавать правила валидации одновременно для клиента и для сервера прямо из интерфейса. Мне кажется это окажется очень удобным и практичным решением. Затем можно развить эту идею и создать даже «Visual Form Builder» на основе как-бы стандарта: «JSON Schema», с которым мне пришлось поработать в свое время.

Если вы захотите сделать что-то аналогичное, я буду только за и даже помогу советами. Считаю что: «Сама идея практически ничего не стоит, стоит ее непосредственная реализация».

В заключение, хочу позволить себе небольшое отступление. Если ты разработчик-мечтатель, как и автор статьи, который получает кайф от своей работы, особенно когда она бросает тебе вызов и хоть немного, но все же решает проблемы других людей, тогда ты скорее всего на правильном пути. Хуже, когда такому человеку приходится гнаться за деньгами, какими-то материальными благами, чтобы соответствовать непонятным социальным стандартам или выполнять скучную, глупую и рутинную работу чтобы просто прокормить себя, свою семью. Кажется не правильным жертвовать своими мечтами, идеями, стремлениями и временем в угоду простым бумажкам. Но в то же время автор статьи никого не побуждает прямо сейчас всё взять и бросить. Каждый должен сделать свой выбор сам и когда для этого наступит действительно подходящее время.
Поделиться с друзьями
-->

Комментарии (62)


  1. Gray_Wolf
    16.11.2016 18:35
    +5

    Хоть вы и старались упростить интерфейс всё равно получилась КДПВ из поста.
    Неподготовленному пользователю данный интерфейс никак не поможет, а подготовленному он и не нужен.
    Да и не совсем я понимаю пользу от валидации без замены…


    1. via-site
      16.11.2016 19:57
      +1

      Простой интерфейс — это была моя самая большая боль. Пробовал разные варианты, но на данный это максимум что я смог получить.

      Если у кого есть предложения по упрощению, тогда только рад буду данной информации.

      P.S. пожалуйста, только не предлагайте пределать в простой tester, т.к. цель именно не в ручном в создании регулярки.


      1. evnuh
        16.11.2016 20:45
        +1

        Программирование мышкой состоит всегда из двух этапов — нащелкивание мышкой / ввод с клавиатуры и отображение результата.
        В вашем случае по центру должно быть поле, где юзер нащелкивает мышкой/вводит параметры регулярки, а под ним — текст с получившейся регуляркой. Ну и где-нибудь спрятаны опции всякие разные, за раскрывающимся блоком.


  1. vlreshet
    16.11.2016 18:43
    +5

    Выглядит красиво, но я не смог разобраться как там составить простейшую регулярку, при том что неплохо умею писать их вручную. Хотел бы я посмотреть на обычного юзера который там разберётся.

    P.S. обычный юзер вообще не знает что такое Regex, и после того как что-то нащёлкает там — не сможет оценить правильность того что он получил.


    1. s-kozlov
      17.11.2016 17:19
      +1

      Иногда неподготовленный пользователь разбирается лучше, чем подготовленный. Никогда не понимал, как люди в Microsoft Access что-то умудряются натыкивать.


  1. afanasiy_nikitin
    16.11.2016 18:54
    +10

    Ох я не завидую программистам, которым потом поддерживать эти user-generated регулярки…


  1. Nagh42
    16.11.2016 19:11
    +3

    Как уже написали выше, сложность изучения регулярных выражений сопоставима со сложностью вашего интерфейса (если не ниже). Поэтому везде находятся сервисы для проверки и объяснения уже составленных выражений, потому что они позволяют неискушенному пользователю визуально понять, что нужно сделать, что он сделал так, а что не так. Ради интереса, возьмите любого неподготовленного пользователя, выдайте ему в зубы задачу (например выделить в произвольном тексте email) и сайт вроде https://regex101.com/. Я уверен, что пользователь разберется с регэкспами (по-крайней мере на базовым уровне) быстрее, чем с вашим интерфейсом.


    1. via-site
      16.11.2016 19:23
      +1

      О части я с вами согласен.

      С простыми пользователями возможно я погорячился. Но вот для программистов начального уровня и даже для некоторых среднего уровня, данный сервис будет более полезным. Мне так кажется.

      Как я писал выше, первая проблема, встающая перед новичком — это: «А как вообще создать регулярку и как создать ее рабочей?». И тут он может немного сэкономить. Согласитесь, что на примерах всегда проще и быстрее учиться.

      Особенно это актуально, когда просто нету на это целого «вагона» времени.

      Для опытных разработчиков картина полностью противоположная. Мне и самому легче вручную составлять регулярки чем вводить примеры.


      1. encyclopedist
        16.11.2016 19:33

        Примеры вот только у вас плохому учат.


        1. via-site
          16.11.2016 20:40

          Исправим.


      1. Maccimo
        17.11.2016 07:35

        На мой взгляд, для начинающих и продолжающих гораздо полезнее будут программы типа https://www.regexbuddy.com/

        «А как вообще создать регулярку и как создать ее рабочей?».
        Правильный ответ — найти статью, объясняющую основы регулярных выражений, после усвоения которой продолжать тренироваться и курить мануалы.


        1. via-site
          18.11.2016 18:11
          -1

          Простите. Но следуя вашей логике, все мы должны еще программировать на Ассемблере и писать код не в IDE, а в консоли.

          Я серьезно.
          Зачем нам высокоуровневые абстракции?
          Зачем нам GUI, если есть консоль?
          Зачем что-то вообще автоматизировать/улучшать/облегчать?
          Зачем вообще прогресс?


          1. Maccimo
            21.11.2016 23:16

            Не очень понятно, как из моего «стоит знать инструмент, который используешь» получилось ваше «долой прогресс».

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


          1. Dexif
            22.11.2016 17:42

            «Не истери!» — Сказал бы мой знакомый…

            Сколько фронтендеров приходит собеседоваться которые умеют jQuery, но не умеют Vanilla JS. Люди изучают фреймворки не изучая основы, а потом жалуются на то, что всё тормозит и ускорить приложение нельзя.

            Инструментами для ускорения разработки пользоваться определённо надо. Главное чтобы эти инструменты не мешали работе приложения.

            Это я к тому что надо знать основы, чтобы знать что и почему происходит. И знать где подкрутить чтобы всё начало летать, а не ползать. Это вам скажет любой разработчик highload сервиса. А регулярки частенько бывают причиной тормозов. Достаточно вспомнить wordpress(хотя не знаю что у них сейчас там, но раньше был регулярный ад).


  1. Fox_exe
    16.11.2016 19:13

    Продуманно не правильно. Зачем вообще нужны регулярки? Чтобы выдернуть из строки/текста некие данные.
    Значит и «Автогенератор» надо было делать примерно так:
    1. Искомая строка
    2. Массив данных, которые мы бы хотели выдрать

    Тоесть:
    1. Имя Фамилия Отчество
    2. Фамилия
    Regex: [а-ЯёЁ]+\s+([а-ЯёЁ]+)\s+[а-ЯёЁ]+\s+
    (Или просто "([а-ЯёЁ]+)" и забирать второй элемент из результата)


    1. via-site
      16.11.2016 19:33
      +1

      Нет. Эти регулярки работают со строками/текстом, которые приходят нам от пользователя. Не важно на клиенте это или на сервере. Наша задача — проверить что введенные данные действительно соответствуют нашим ожиданиям (регулярке).


    1. s-kozlov
      17.11.2016 17:22

      Ага, ага. Зачем вообще нужны программы? Чтобы взять исходные данные и вернуть другие. Берем и пишем такую программу — задача искусственного интеллекта решена.


  1. leschenko
    16.11.2016 19:16
    +5

    С такими генераторами очень легко получить такую ситуацию.


    1. encyclopedist
      16.11.2016 19:32

      Да, а ещё: бывают фамилии, начинающиеся со строчной, фамилии содержащие пробел, содержащие дефис, апостроф, и т.д.


  1. samodum
    16.11.2016 19:23
    +4

    >Практически в 100% случаев нам совершенно не нравится их составлять

    Практически в 100% случаев программистам нравится составлять регулярки.
    А вот красивости программистам не нужны. Достаточно консоли


    1. s-kozlov
      17.11.2016 17:23

      Практически в 100% случаев программистам нравится составлять регулярки


      За себя, пожалуйста, говорите.


      1. bask
        18.11.2016 02:35

        К автору поста вопросов нет?


        1. s-kozlov
          18.11.2016 06:40

          Нет


          1. samodum
            18.11.2016 23:28

            То есть, когда автор поста говорит «Практически в 100% случаев нам совершенно не нравится их составлять», то вопросов к нему нет, а ко мне есть? Оооокей.
            Будь более последовательным и логичным в своих рассуждениях, падаван.


            1. s-kozlov
              19.11.2016 09:09

              А что тут спрашивать, когда я с ним согласен, причем не только насчет себя лично.


              1. KlimovDm
                19.11.2016 10:54
                -1

                я с ним согласен, причем не только насчет себя лично
                А вы «за себя, пожалуйста, говорите» ©. Не кажется вам странным оставлять себе возможность говорить за других, при этом отказывая в этом праве оппонентам? Будь более последовательным и логичным в своих рассуждениях ©


      1. a1111exe
        18.11.2016 10:57
        +1

        А я поддерживаю. Кайф от использования regex в Perl трудно описать человеческим языком.


  1. KlimovDm
    16.11.2016 19:31
    +2

    Практически в 100% случаев нам совершенно не нравится их составлять, считая это побочной работой, не связанной с программированием.
    Нравится/не нравится — вопрос интимный. Но… Разработчики! Поднимите руку, кто считает, что работа с регулярками — побочная и не связана с программированием?


    1. via-site
      16.11.2016 19:35
      +1

      Понял свою ошибку. Только холиваров не надо!


      1. KlimovDm
        16.11.2016 21:35

        Да, холиваров не надо, это точно. Я просто пытался понять, кому может реально пригодится ваш сервис.
        Явно, что вы писали его не для себя — автор такого проекта должен быть сам с регулярками на «ты».
        Отбросим программистов, которые по специфике решаемых задач вообще не работают с регулярками.
        Программисты, работающие с регулярками — тоже нет (сужу по себе).
        Начинающие программисты, которые ужаснулись, впервые столкнувшись с регулярными выражениями? Так для них такой сервис — вреден :) — учиться надо.

        В общем я некотором замешательстве. Хотелось бы ошибиться, но мне кажется, что проект (достаточно серьезный) построен на ошибочном начальном предположении о «практически 100%»


        1. gooddaytoday
          17.11.2016 12:05

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


          1. via-site
            18.11.2016 10:43

            Как и писал в статье, именно от таких сотрудников и пришел первоначальный запрос на подобный функционал.


        1. ildarz
          17.11.2016 13:16

          > Я просто пытался понять, кому может реально пригодится ваш сервис.

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


    1. 90h
      16.11.2016 20:20
      +2

      Но… Разработчики! Поднимите руку, кто считает, что работа с регулярками — побочная и не связана с программированием?

      Как пользователь Linux могу сказать что чаще использую регулярки в делах не связанных с программированием.
      Для форматирования/обрезания выхлопа консольных утилит, например.

      Кроме того многие редакторы/IDE умеют поиск/замену по регуляркам, при этом подсвечивают куски текста и даже показывают результат будущей замены в подсказке. Что очень удобно.

      И да, мне нравятся регулярки :)


  1. vlad230596
    16.11.2016 19:59

    Удобство интерфейса для пользователя хотелось бы получше, а то слишком много всего.
    Кстати, в примерах неверное регулярное выражение для IP адреса: числа не могут превышать 255.


    1. via-site
      16.11.2016 20:11

      Про интерефейс полностью согласен. Надеюсь на большое число конструктивных отзывов.
      IP — спасибо, пропустил.


  1. vitaly_KF
    16.11.2016 20:01
    +1

    Круто! Только хорошо было бы положить исходники на github, чтоб можно было всегда развернуть в своей сети.
    А то веб сервисы бывает перестают существовать через некоторое время. Да и можно будет делать пулл-реквесты с улучшениями.

    И еще хак — если там все на JS, то можно кажись на гитхабе создать статичный сайт, он будет вечный)


    1. via-site
      16.11.2016 20:17

      https://uiregex.firebaseapp.com/ru — настоящий урл сервиса. Тоже «вечный» и бесплатный. А тот короткий — просто зеркало.

      На гитхабе хостинг одностраничных приложений на порядок хуже чем в Firebase (нет html5Mode, настроек кэширования файлов, редиректов ...)


      1. vitaly_KF
        16.11.2016 20:57

        Giок, по сайту супер. По исходниками вопрос открыт)


        1. via-site
          18.11.2016 10:45

          Пока не спешу открывать исходники. Возможно позже, когда выйдет версия 2.0


  1. 4eyes
    16.11.2016 20:33

    На правах зануды:

    Как водится, пример регулярки для email — неправильный.
    Контрпримеры:

    • user@192.168.1.1
    • konishiwa+hello@world.co.uk


    1. via-site
      16.11.2016 20:38
      -2

      Да. Эти варианты в примере скорее всего будут полезны. Добавлю, спасибо.

      Знаю что есть еще вариант доменов на кириллице или других письменностях, но указывать их все в примере — это уже перебор.


    1. 90h
      16.11.2016 21:11
      +1

      user@192.168.1.1
      konishiwa+hello@world.co.uk

      В RegExr, про который ниже писал, пример валидации выглядит так:
      /^(?:(?:[\w`~!#$%^&*\-=+;:{}'|,?\/]+(?:(?:\.(?:"(?:\\?[\w`~!#$%^&*\-=+;:{}'|,?\/\.()<>\[\] @]|\\"|\\\\)*"|[\w`~!#$%^&*\-=+;:{}'|,?\/]+))*\.[\w`~!#$%^&*\-=+;:{}'|,?\/]+)?)|(?:"(?:\\?[\w`~!#$%^&*\-=+;:{}'|,?\/\.()<>\[\] @]|\\"|\\\\)+"))@(?:[a-zA-Z\d\-]+(?:\.[a-zA-Z\d\-]+)*|\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])$/
      

      :)

      Написано что валидирует все примеры из вики, кроме вариантов с IPv6.



      1. timukas
        17.11.2016 18:24

        Меня \d{1,3} не устравивает для валидации ип адресов. Потому что 456.23.892.21 попадает под эту регулярку.

        Я использую "(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])"


  1. saboteur_kiev
    16.11.2016 20:36
    +2

    Я не совсем понял, как именно вы упростили интерфейс, но… в тренинг центре нашей компании я подготовил небольшой курс по регуляркам и прочитал его студентам уже несколько раз.
    А на вашем сайте я не смог составить простейшую регулярку с бэкреференсом, потратив целых 5 минут…


  1. Jogger
    16.11.2016 20:36
    +1

    Я мог бы быть целевой аудиторией. Потому что регулярные выражения использую достаточно редко, чтобы успеть забыть синтаксис, и потому каждый раз вынужден перечитывать документацию. Но. Во-первых, как уже сказали — интерфейс нисколько не интуитивен. Мне проще каждый раз перечитать документацию по регэкспам, чем каждый раз перечитать инструкцию к подобному сервису. Да и полезнее пожалуй, может со временем запомнится. Во-вторых — проверка валидации — только одна из задач, решаемых с помощью регэкспов, что делает использование этого инструмента ещё более неоправданным.
    Так что я в смятении — с одной стороны, я благодарен даже за попытку облегчить жизнь таким людям как я, с другой — облегчения как-то не наступило(


  1. webhamster
    16.11.2016 20:41

    Зависает крипт на странице при попытке входа на нее. Вешается весь браузер. Firefox 33.


  1. 90h
    16.11.2016 20:56

    Есть такая полезная штука как awesome lists — сборник всяких полезностей и туториалов. Вот там, кроме уже упомянутого RegEx101, нашел еще RegExr — с блэкджеком и ... примерами, хинтами и «выбором сообщества».
    Есть еще RegExpBuilder, очень похоже на то что описано в посте, только библиотека для JS.

    Может кому пригодится.


    1. via-site
      18.11.2016 18:34

      Простите. Но сравнивать Генератор с тестером — это как сравнивать программиста с тестировщиком.

      Не спорю, тестировщики у нас с огромным опытом работы из-за этого ценятся они у нас они очень высоко.
      Но что что конкретно они создают? Что они будут тестировать, если у нас не будет ни одного программиста, даже самого молодого, которой только начал работать?
      Да, программист только начал свою работу. Он еще не опытен, еще не всё умеет делать, допускает ошибки, но в перспективе его ценность гораздо выше любого тестеровщика, даже самого продвинутого.

      Надеюсь теперь, наконец, станет понятна та мысль, которую я хотел донести с самого начала.


  1. alexeyw
    17.11.2016 03:14
    -2

    На мой взгляд, идеальный визуальный генератор должен выглядеть так:
    Пользователь выделяет часть текста и генератор показывает ему выражение для такого выделения с опциями длины групп и наборов символов.


    1. Deosis
      17.11.2016 07:27

      К сожалению, не сработает.
      Как в таком редакторе указать, что длина должна быть четной?
      Первая версия регулярного выражения будет либо слишком ограниченной и тогда придется добавлять множество вариантов граничных случаев.
      Либо она будет слишком широкой, и граничные случаи придется отсекать.
      При таких итерациях формула будет переходить от одного состояния ко второму.


    1. KlimovDm
      17.11.2016 07:45
      +1

      Вы говорите об ИИ :) Регулярки не ограничиваются наборами символов и длинами групп. И, как правило, за ними есть формализованная сущность. Прекрасный пример выше — email. Мало выделить email в тексте, надо еще дать генератору набор ссылок на соответствующие RFC :)


      1. alexeyw
        17.11.2016 08:02

        Ну это само собой, как без этого, кому нужны регулярки вида \w+. А ещё что-бы предлагал на выбор не одно, а несколько возможный регулярных выражений. И конечно выделение другого блока текста чтобы модифицировало выражение с учетом всех раннее выделенных.


  1. sayanlar
    17.11.2016 13:03

    Прочитал руководство, не могу понять самого главного: как все-таки написать регекс средствами вашего приложения? Пока могу только pcre-строкой занести…


    1. via-site
      17.11.2016 13:10

      Для работы, если это не точное правило, нужны как минимум примеры с «пограничными» значениями. Например, это могут быть строки минимальной и максимальной длины,…

      Чем больше будет примеров для того, что вы действительно хотите провалидировать — тем лучше будет результат (в теории).


  1. Vcoderlab
    17.11.2016 13:11

    Здравствуйте. Идея очень интересная.

    Мне иногда (как уже писали выше, достаточно редко, что к следующему разу успеваю забыть, как это делается) бывает нужно пропустить какой-нибудь конфигурационный файл через grep, чтобы отфильтровать комментарии (строки, начинающиеся с "#") и вывести только значащие строки. Это сильно упрощает поиск параметров среди обилия комментариев. Подскажите пожалуйста, как составить такую регулярку с помощью вашего сервиса.


    1. via-site
      17.11.2016 13:18

      По некоторым комментариям, уже понял свое упущение.

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


    1. 90h
      17.11.2016 13:19

      бывает нужно пропустить какой-нибудь конфигурационный файл через grep, чтобы отфильтровать комментарии

      cat /path/to/file | grep -v '#'
      

      или
      cat /path/to/file | grep -v '^#'
      


  1. fekrado
    17.11.2016 13:40

    Очень хороший сервис есть http://txt2re.com/ Выручал много раз!!! Причем сразу регулярку переводит в программный код.


    1. via-site
      18.11.2016 18:16

      Посмотрел. Довольно интересное они выбрали решение и в отличие от предыдущих комментариев — это действительно Генератор.
      Мне кажется именно об этом и писал alexeyw в своем первом комментарии.


  1. AstRonin
    24.11.2016 09:36

    в общем-то круто, только сделайте генерацию, плиз, чуток поумнее :)

    eEe.mail@google.com

    /^[a-z]{1}[A-Z]{1}[a-z]{1}[.]{1}[a-z]{4}[@]{1}[a-z]{6}[.]{1}[a-z]{3}$/


    т.е. фактически это не сработает для
    eee.mail@google.com
    eE.mail@google.com
    и т.д…

    было бы не плохо увидеть хотя бы так (заменил [a-zA-Z]):
    /^[a-zA-Z]+[.]{1}[a-z]{4}[@]{1}[a-z]{6}[.]{1}[a-z]{3}$/

    ну так далее…

    регулярка в общем-то нужна, чтоб находить вариации в тексте, если находить только точные совпадения, то нафига регулярка тогда вообще нужна…