Description
streamsearch is a module for node.js that allows searching a stream using the Boyer-Moore-Horspool algorithm.
This module is based heavily on the Streaming Boyer-Moore-Horspool C++ implementation by Hongli Lai here.
Requirements
- node.js -- v0.8.0 or newer
Installation
npm install streamsearch
Example
var StreamSearch = require('streamsearch'),
inspect = require('util').inspect;
var needle = new Buffer([13, 10]), // CRLF
s = new StreamSearch(needle),
chunks = [
new Buffer('foo'),
new Buffer(' bar'),
new Buffer('\r'),
new Buffer('\n'),
new Buffer('baz, hello\r'),
new Buffer('\n world.'),
new Buffer('\r\n Node.JS rules!!\r\n\r\n')
];
s.on('info', function(isMatch, data, start, end) {
if (data)
console.log('data: ' + inspect(data.toString('ascii', start, end)));
if (isMatch)
console.log('match!');
});
for (var i = 0, len = chunks.length; i < len; ++i)
s.push(chunks[i]);
// output:
//
// data: 'foo'
// data: ' bar'
// match!
// data: 'baz, hello'
// match!
// data: ' world.'
// match!
// data: ' Node.JS rules!!'
// match!
// data: ''
// match!
API
Events
-
info(< boolean >isMatch[, < Buffer >chunk, < integer >start, < integer >end]) - A match may or may not have been made. In either case, a preceding
chunk
of data may be available that did not match the needle. Data (if available) is inchunk
betweenstart
(inclusive) andend
(exclusive).
Properties
maxMatches - < integer > - The maximum number of matches. Defaults to Infinity.
matches - < integer > - The current match count.
Functions
(constructor)(< mixed >needle) - Creates and returns a new instance for searching for a Buffer or string
needle
.push(< Buffer >chunk) - integer - Processes
chunk
. The return value is the last processed index inchunk
+ 1.reset() - (void) - Resets internal state. Useful for when you wish to start searching a new/different stream for example.