RegExp API for Humans!
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.grunt/grunt-contrib-jasmine
dist
src
test
.editorconfig
.eslintrc.json
.gitattributes
.gitignore
Gruntfile.js
LICENSE
README.md
bower.json
docma.config.json
package.json
webpack.config.js

README.md

re.js

npm release dependencies license maintained

© 2018, Onur Yıldırım (@onury). MIT License.

RegExp API for Humans!

  • Friendly API! e.g. re(pattern).each(input, callback)
  • Universal module (Browser/Node/CommonJS/AMD)
  • Small size. Only 1.5 KB minified, gzipped.
  • Well documented.

Installation

Install via NPM:

npm i re.js

Install via Bower:

bower install re.js

Usage

For all the features and details, please read the API reference.

const re = require('re.js');

.each()

var input = 'Peter Piper picked a peck of pickled peppers.';

re(/p\w+/i).each(input, function (matches) {
    console.log(matches[0]);
});

Note that above example does not have a g flag (for global) in the RegExp. But logically; since you're calling each() it should search for all. So re automatically fixes it for you.

.eachRight()

Iterate from last match to first.

re(/p\w+/i).eachRight(input, function (matches, index) {
    if (matches[0] === 'peck') {
        console.log('exiting @', index); // —> exiting @ 3
        // return early, no more iterations..
        return false;
    }
});

.map()

var mapped = re(/p\w+/i).map(input, function (matches) {
    return matches[0];
});
console.log(mapped);
// —> ["Peter", "Piper", "picked", "peck", "pickled", "peppers"]

.all()

re(/p\w+/i).all(input);
// —> [Array, Array, Array, Array, Array, Array]

.match()

re(/p\w+/i).match(input);
// —> ["Peter", "Piper", "picked", "peck", "pickled", "peppers"]

.exec().next()

re(/p\w+/i)
    .exec(input)
    .next(function (matches, index) {
        console.log(index + ':', matches[0]); // —> 0: "Peter"
    })
    .next(function (matches, index) {
        console.log(index, ':', matches[0]); // —> 1: "Piper"
    })
    ..

.test()

for convenience...

re(/p\w+/i).test(input); // —> true

Match Indices

re(/p\w+/i).first(input)[0];        // —> "Peter"
re(/p\w+/i).firstIndex(input);      // —> 0
re(/p\w+/i).first(input).index;     // —> 0

re(/none/).first(input);            // —> null
re(/none/).firstIndex(input);       // —> -1
re(/none/).first(input).index;      // —> Error

re(/p\w+/i).last(input)[0];         // —> "peppers"
re(/p\w+/i).lastIndex(input);       // —> 37
re(/p\w+/i).last(input).index;      // —> 37

re(/p\w+/i).nth(input, 3)[0];       // —> "picked"

re(/p\w+/i).indices(input);         // —> [ 0, 6, 12, 21, 29, 37 ]

Documentation

See all methods and features.

Change Log

  • v1.1.0

    • .eachRight() callback parameter index is now reversed. (last iteration index will be 0.)
    • Added .eachInverse() method for iterating over non-matched blocks. #experimental
    • Added extra argument to callbacks for convenience: charIndex (same as matches.index).
  • v1.0.0

    • Initial release.

License

MIT.