Git Product home page Git Product logo

array-matcher's Introduction

@mizu-mizu/array-matcher

The matcher JavaScript library for array.

This script works in modern browsers and Node.JS .

Installation

In a browser:

Download the file as 'array-matcher.js' from github | master next to the html, and insert import in the script tag.

<script type="module">
    import * as arrayMatcher from './array-matcher.js';
</script>

In a Node.JS:

npm install --save @mizu-mizu/array-matcher
const arrayMatcher = require('@mizu-mizu/array-matcher');

Features

Some tiny matcher generators are provided, and also, you can implement your own matcher.

Glob matching (string array)

import {glob} from './array-matcher.js';
const matcher = glob('root/**/*.txt');
matcher(['root', 'parent', 'child.txt']);  // => true
matcher(['root', 'parent', 'child.json']); // => false

Supports:

  • ** : match 0 or more items.
  • * : match 0 or more characters.
  • ? : match any single character.
  • [abc] : match 'a' or 'b' or 'c'
  • [a-z] : match 'a' to 'z'

Css-like matching (object array)

import {querySelector} from './array-matcher.js';
const matcher = querySelector('#target');
matcher([
    {tagName: 'body'},
    {tagName: 'main'},
    {tagName: 'span', id:'target'}
]); // => true

Supports:

  • tagname: match whose tagName property is the same to 'tagname'.
  • .class-selector: match whose classList contains 'class-selector' as an array, or it's contains('class-selector') method returns true.
  • #id : match whose id property is the same to 'id'.
  • > : separator to it's child.
  • : separator to it's descendant.
  • , : separator match for either left part or right part.

Create your own matcher

Using matcher functions list:

import {matchResult, match} from './array-matcher.js';
/*
 * Prepare an array of matching functions.
 * This example matches all array whose first element is 'first'
 *   (not depends on it's letter case).
 */
const matcherList = [
    str=>str.toLowerCase() === 'first' ? matchResult.OK : matchResult.FAIL,
    ()=>matchResult.ANY_CONSUME
];
match(matcherList, ['first', 'second']); // => true
match(matcherList, ['FIRST', 'SECOND']); // => true
match(matcherList, ['illegal', 'first', 'second']); // => false

Implements the CompilerBase class:

import {CompilerBase, matchResult} from './array-matcher.js';
/*
 * Implements the CompilerBase and override some methods.
 */
class OriginalMatcherCompiler extends CompilerBase{
    /*
     * If you provide a string in the argument array of this#compile(),
     *   this method is called.
     * This method should return a matching function.
     */
    acceptString(str) {
        /* To support glob-like recursive match. */
        if(str==='**') return ()=>matchResult.ANY_CONSUME;
        return target=>(target&& target.toLowerCase())===str 
                ? matchResult.OK : matchResult.FAIL;
    }
}
const matcher = new OriginalMatcherCompiler().compile(
    ['first', '**']
);
matcher(['first', 'second']); // => true
matcher(['FIRST', 'SECOND']); // => true
matcher(['illegal', 'first', 'second']); // => false

Documents

You can check the detail document by running commands below (JSDoc).

git clone https://github.com/uiui611/array-matcher.git
cd array-matcher
npm install
npm run jsdoc
start jsdoc/index.html

Also, you can check the examples at '{project-root}/examples/'.

array-matcher's People

Contributors

uiui611 avatar dependabot[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.