Projektstart
This commit is contained in:
68
backend/node_modules/obliterator/split.js
generated
vendored
Normal file
68
backend/node_modules/obliterator/split.js
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
/**
|
||||
* Obliterator Split Function
|
||||
* ===========================
|
||||
*
|
||||
* Function returning an iterator over the pieces of a regex split.
|
||||
*/
|
||||
var Iterator = require('./iterator.js');
|
||||
|
||||
/**
|
||||
* Function used to make the given pattern global.
|
||||
*
|
||||
* @param {RegExp} pattern - Regular expression to make global.
|
||||
* @return {RegExp}
|
||||
*/
|
||||
function makeGlobal(pattern) {
|
||||
var flags = 'g';
|
||||
|
||||
if (pattern.multiline) flags += 'm';
|
||||
if (pattern.ignoreCase) flags += 'i';
|
||||
if (pattern.sticky) flags += 'y';
|
||||
if (pattern.unicode) flags += 'u';
|
||||
|
||||
return new RegExp(pattern.source, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Split.
|
||||
*
|
||||
* @param {RegExp} pattern - Regular expression to use.
|
||||
* @param {string} string - Target string.
|
||||
* @return {Iterator}
|
||||
*/
|
||||
module.exports = function split(pattern, string) {
|
||||
if (!(pattern instanceof RegExp))
|
||||
throw new Error(
|
||||
'obliterator/split: invalid pattern. Expecting a regular expression.'
|
||||
);
|
||||
|
||||
if (typeof string !== 'string')
|
||||
throw new Error('obliterator/split: invalid target. Expecting a string.');
|
||||
|
||||
// NOTE: cloning the pattern has a performance cost but side effects for not
|
||||
// doing so might be worse.
|
||||
pattern = makeGlobal(pattern);
|
||||
|
||||
var consumed = false,
|
||||
current = 0;
|
||||
|
||||
return new Iterator(function () {
|
||||
if (consumed) return {done: true};
|
||||
|
||||
var match = pattern.exec(string),
|
||||
value,
|
||||
length;
|
||||
|
||||
if (match) {
|
||||
length = match.index + match[0].length;
|
||||
|
||||
value = string.slice(current, match.index);
|
||||
current = length;
|
||||
} else {
|
||||
consumed = true;
|
||||
value = string.slice(current);
|
||||
}
|
||||
|
||||
return {value: value, done: false};
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user