skip-regex

Micro parser for detection of literal regexes

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
skip-regex
001.0.24 years ago5 years agoMinified + gzip package size for skip-regex in KB

Readme

skipRegex
!npm Versionnpm-badgenpm-url !Licenselicense-badgelicense-url !Build Statustravis-badgetravis-url !Coveragecodecov-badgecodecov-url !Minified Sizesize-badgesize-url
Micro parser for detection of literal regexes.
  • Fast detection with high accuracy.
  • Minimum size.
  • Compatible with NodeJS, bundlers, IE9+, and modern Browsers.
  • TypeScript definition.
  • Zero dependencies.

Install

npm install skip-regex --save
# or
yarn add skip-regex

or load the global skipRegex function in your browser:
<script src="https://unpkg.com/skip-regex/index.min.js"></script>

Three formats transpiled to ES5:
  • CommonJS for node.js and browserify-like bundlers.
  • ESM for bundlers like Rollup.
  • UMD for AMD, CommonJS, and browsers.

Syntax

skipRegex(source: string, start: number) => number

The start position must point to a slash within source.
From there, skipRegex will find the end of a regular expression in the given string.
The returned value is the position of the character following the regex, or start+1 if the slash does not start a regex.

Example

This is a silly example, but it will give the idea.
import skipRegex from 'skip-regex'

const source = ' /.*/ '
const start  = source.indexOf('/')

if (~start) {
  const end = skipRegex(source, start)

  if (end > start + 1) {      // detected as regex?
    const regex = source.slice(start, end)
    console.log(`Found regex ${regex} at position ${start}!`)

  } else if (source[end] === '*' || source[end] === '/') {
    console.log('The slash starts a JS comment.')

  } else {
    console.log('The slash is a division sign.')
  }
}

For something more complete see the js-cleanup code, an utility to clean comments safely in JS-like sources, which uses skip-regex to skip regular expressions.
For Rollup, you can use rollup-plugin-node-resolve to resolve 'skip-regex' as an ES6 module.
For TypeScript, enable esModuleInterop in your tsconfig.json or use the "import=require" syntax:
import skipRegex = require('skip-regex')

//...

Related Links

Some sites and tools that have been helpful:

Support my Work

I'm a full-stack developer with more than 20 year of experience and I try to share most of my work for free and help others, but this takes a significant amount of time and effort so, if you like my work, please consider...
kofi-url
Of course, feedback, PRs, and stars are also welcome 🙃
Thanks for your support!

Licence

The MIT license (MIT)
© 2018 Alberto Martínez