Newton's Preposterous Miscalculation

    create-regex
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.2 • Public • Published

    Create Regex

    Greenkeeper badge NPM Version Build Status Test Coverage

    Simple and powerful utility to create complex regex in javascript

    Create regex

    When creating long and powerful regular expression it becomes hard to remember and manage to numerous signs and sub patterns.

    create-regex allows you to write regex in code like approche while also reducing the burden of some boilerplate actions. It also encourges the usage of regex named groups, which make the matching part of the regex much simpler.

    Simple to use

      // import the regex factory
      const {RegExpFactory} = require('create-regex');
      // The regex factory assit you in creating the regex instance
      const regexFactory = new RegExpFactory({ });
      // Now by using the `create` method you create the regex instance
      // For more advanced usage go to the `API` section
      const yourRegex = regexFactory.create(({
        nonCaptureGroupWithSeperator,
        group
      })=>
        nonCaptureGroupWithSeperator([
          group('digits','\\d+'),
          group('words', '\\w+'),
          group('else', '[\\s\\S]+')
        ])
      ,'gm');
      /*
        Prodcues the following regex:
        /(?:(?:(?<digits>\d+))|(?:(?<words>\w+))|(?:(?<else>[\s\S]+)))/gm
        Try it with the following string (we higly recommend to using the site `regex101`)
      */
      const str = '121212ababa...{}';
      let match;
     
      while ((match = regex.exec(str)) !== null) {
          // This is necessary to avoid infinite loops with zero-width matches
          if (match.index === regex.lastIndex) {
              regex.lastIndex++;
          }
          
          Object.keys(match.groups).forEach((groupName) => {
          if (match.groups[groupName])
              console.log(`Found match, group ${groupName}${match.groups[groupName]}`);
          });
      }
      //It should produce the following output
      /*
        Found match, group digits: 121212
        Found match, group words: ababa
        Found match, group else: ...{}
      */

    API

    The API is very simple and yet powerfull. The factory accepts mixins that you will be able use during create

      const regexFactory = new RegExpFactory({ 
        mixins: {
          stringSigns: [`'`,'"',"'"]
        },
        RegExp : RegExp // <-- you can overide the regex used internally
      });
      // Let's say we want to match quoted number and digits
      // Really quoted with the same string sign from both sides
      regexFactory.create(({
          // Built in helpers
          nonCaptureGroupWithSeperator,
          group,
          wrapPattern,
          // User mixins
          stringSigns
        })=>
          nonCaptureGroupWithSeperator([
            group('digits',
              wrapPattern('\\d+',stringSigns)
            ),
            group('words',
              wrapPattern('\\w+',stringSigns)
            ),
            group('else', '[\\s\\S]+')
          ])
        ,'gm');
      /* Produces the following regex:
        /(?:(?:(?<digits>(?:(?:'\d+')|(?:"\d+")|(?:'\d+'))))|(?:(?<words>(?:(?:'\w+')|(?:"\w+")|(?:'\w+'))))|(?:(?<else>[\s\S]+)))/gm
      */

    License

    MIT

    Install

    npm i create-regex

    DownloadsWeekly Downloads

    2

    Version

    0.0.2

    License

    MIT

    Unpacked Size

    14.5 kB

    Total Files

    7

    Last publish

    Collaborators

    • hiscojs