Skip to content

onury/re

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

re.js

npm release dependencies license maintained

© 2019, 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.