Détail du package

skip-regex

aMarCruz341.4kMIT1.0.2

Micro parser for detection of literal regexes

javascript, typescript, es6, micro

readme

skipRegex

npm Version License Build Status Coverage Minified Size

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...

Of course, feedback, PRs, and stars are also welcome 🙃

Thanks for your support!

Licence

The MIT license (MIT)

© 2018 Alberto Martínez

changelog

skipRegex Changes

[1.0.2] - 2018-12-24

Added

  • Adds of to the keywords that can precede a regex.
  • Support for the s (ES9 "dotAll") flag.
  • Related links in the Readme.

[1.0.1] - 2018-12-21

Fixed

  • ESLint must be in devDependencies.

[1.0.0] - 2018-12-21

Ready for production

Added

  • Adds away and extends as keywords that can precede a regex.
  • UMD Builds, including a minified one for browsers.
  • ESLint with revised configuration.
  • Karma test for browsers (local) and node.
  • Travis test with 100% coverage.
  • Config file for the markdownlint VSCode extension.
  • VSCode folder to the repo.

Changed

  • Simplify the main regex and some parts of the code.
  • Renamed the ESM variant from skip-regex.esm.js to skip-regex.mjs (node ESM compatible).
  • Update devDependencies.
  • CHANGES.md now is CHANGELOG.md and have a new format.
  • Update badges using badgen.
  • Update license.

Fixed

  • Fail when > is the first character in the regex.
  • Fail when the regex is preceded by <.
  • TypeScript definition.

[0.3.1] - 2017-10-19

Changed

  • Removes npm 3.x requirement.
  • Updated devDependencies.

[0.3.0] - 2017-07-04

Added

  • ESM variant.

Changed

  • Improved detection of regex with increment/decrement prefix operator.
  • ES6 module version transpiled to ES5.
  • Added jsDoc comments and banner.
  • Enhanced README.

Fixed

  • Prevent error if the start parameter is out of range.

[0.2.0] - 2017-06-22

First public release published in npm with the name 'skip-regex'