Giter Club home page Giter Club logo

js-restructure's Introduction

js-restructure

Based on https://github.com/alexflint/go-restructure

This package allows you to express regular expressions by defining an object, and then capture matched sub-expressions into object's fields.

Here is a very simple email address parser:

var parser = matcher({
   _    : "^",
   user : "\\w+", // can also pass a JS RegExp here
   _2   : "@",
   host : "[^@]+",
   _3    : "$"
});
var parts = parser("[email protected]");
console.log(parts.user); // benji
console.log(host); // somewhere.com

Example primitive URL parser:

var m = matcher({
   protocol    : "http|https",
   _1 : "://", // can also pass a RegExp here
   host : "[^/]+",
   _2   : "/",
   path : ".+",
   _3    : "$"
})("http://www.google.com/search?foo=bar");
m.protocol; // http
m.host; // www.google.com
m.path; // search?foo=bar

Note: In "real code" use the built in parsing capabilities of browsers/node to parse real URLs.

Installation

npm install js-restructure

Or in the browser

<script src='https://wzrd.in/standalone/js-restructure@latest'></script>

Usage in script tag:

var matcher = window.jsRestructure(...);

API

The basic fundamental unit of js-restructure is a parser. A parser is created by passing an object to the matcher function (the one you require, in the browser this is window.jsRestructure).

Creating a parser:

matcher(T object) -> Parser

For example:

var parser = matcher({x : A });

Note: The parser ignores properties that start with _, if you have properties that you do not want to capture but need to specify parts of the RE, start them with _.

A parser is itself a function that can be passed a string, it returns an object of the type passed when creating the parser or null if the parsing failed:

Parser:: (string[, flags]) => T?

For example:

var parser = matcher({x : A });
parser("A").x; // A
parser("B"); // null, no match

The second flags parameter is optional and allows setting RE flags like "i" for case insensitivity. The parser also exposes a .re property so the resulting RegExp can be checked and reused.

Todo

  • put in module
  • npm package
  • cdn etc.
  • tests
  • demos
  • nested match
  • measure performance
  • sugar

js-restructure's People

Contributors

benjamingr avatar

Watchers

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