@mizu-mizu/array-matcher

    1.1.4 • Public • Published

    @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/'.

    Install

    npm i @mizu-mizu/array-matcher

    DownloadsWeekly Downloads

    1

    Version

    1.1.4

    License

    MIT

    Unpacked Size

    27.7 kB

    Total Files

    5

    Last publish

    Collaborators

    • avatar