Skip to content

MomsFriendlyDevCo/Match

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@MomsFriendlyDevCo/Match

Simple string matching / globbing / RegEx matching.

  • Isomorphic, "just works" functionality in the browser / node - already minified, upstream shims already applied
  • Works with arrays of patterns
  • Compatibility with *.globs / "/regexp/"
  • Returns a simple matcher function without object / classing overhead
  • Both ESM and CJS support

Why

I couldn't find a library that did what I wanted:

  • micromatch & picomatch - Both require shiming of process and path to work properly in the browser without screwing around with Webpack
  • nanomatch - Doens't support brace expansion
  • All of the above have hit-and-miss support for arrays of globs
  • None of them are out-of-the-box extendable to also cope with "/regexp/" strings as well as globs
import match from '@momsfriendlydevco/match';

// Simple string matching
match.isMatch('*.js', 'hello.js') //= true
match.isMatch(['*.js', '.txt'], 'hello.js') //= true
match.isMatch(/\.js$/, 'hello.js') //= true
match.isMatch('/\.js$/', 'hello.js') //= true


// Pre-compiled matcher
let matcher = match.compile(['*.js', '/\.txt$/']);
matcher('hello.js'); //= true
matcher('hello.txt'); //= true
matcher('hello.css'); //= false

API

In all cases patterns can be:

  • A single glob expression
  • A string surrounded by / indicating it should be treated as a RegExp match (with optional RegExp flags)
  • A raw RegEx
  • An array of any combination of the above

options for all API's are passed directly onto the picomatch library except for the following which are parsed then removed before being passed to picomatach:

Option Type Default Description
csv boolean false If the input is a single string, split it using CSV rules, before parsing

Match.isMatch(patterns, subject, options)

Return a simple boolean if the subject matches any of the given patterns. Options is any valid config for picomatch.

import match from '@momsfriendlydevco/match';
import {isMatch} from '@momsfriendlydevco/match'; // ... OR as spread export

match.isMatch('*.js', 'hello.js') //= true
match.isMatch(['*.js', '.txt'], 'hello.js') //= true
match.isMatch(/\.js$/, 'hello.js') //= true
match.isMatch('/\.js$/', 'hello.js') //= true

Match.compile(patterns, options)

Create a function which can be used to match against subsequent subjects. Options is any valid config for picomatch.

import match from '@momsfriendlydevco/match';
import {compile} from '@momsfriendlydevco/match'; // ... OR as spread export

let matcher = match.compile(['*.js', '/\.txt$/']);

matcher('hello.js'); //= true
matcher('hello.txt'); //= true
matcher('hello.css'); //= false

About

Simple string matching / globbing / RegEx matching

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published