split-retain
Version:
Split a string and preserve the delimiters.
105 lines (81 loc) • 2.93 kB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
;
window.splitRetain = require('./split-retain');
},{"./split-retain":2}],2:[function(require,module,exports){
;
exports = module.exports = splitRetain;
/**
* splitRetain
*
* @param {String} string - string to split
* @param {String|RegExp} separator
* @param {Object|undefined} options
* @param {Boolean} options.leadingSeparator - if true, the separator will be the leading character in the split array
* @return {Array} split text
* @throws {Error}
*/
function splitRetain(string, separator, options) {
options = defaults(options, {});
options.leadingSeparator = defaults(options.leadingSeparator, false);
assert.type(string, 'string', '`string` is not a string');
assert(typeof separator === 'string' || separator instanceof RegExp, 'invalid `separator` type');
assert.type(options, 'object', 'invalid `options` type');
assert.type(options.leadingSeparator, 'boolean', 'invalid `options.leadingSeparator` type');
if (string.length === 0) {
return [''];
}
separator = separatorToRegex(separator);
var tokens = string.split(separator);
if (tokens.length === 1) {
return tokens;
}
var result = [];
if (options.leadingSeparator) {
result.push(tokens.shift());
}
while (tokens.length > 0) {
if (tokens.length === 1) {
result.push(tokens.shift());
}
else {
result.push(tokens.shift() + tokens.shift());
}
}
if (result[0] === '') {
result.shift();
}
if (result[result.length - 1] === '') {
result.pop();
}
return result;
}
splitRetain['VERSION'] = '1.0.1';
function separatorToRegex(separator) {
if (separator instanceof RegExp) {
return separator;
}
return new RegExp('(' + escapeRegex(separator) + ')', 'g');
}
function escapeRegex(string) {
//http://stackoverflow.com/a/9310752/4782902
return string.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
}
function assert(condition, message) {
if (!condition) {
throw new Error(message);
}
}
assert.type = function (variable, expectedType, message) {
if (typeof variable !== expectedType) {
throw new Error(message);
}
}
function defaults(optionalData, defaultData) {
if (optionalData === undefined) {
return defaultData;
}
else {
return optionalData;
}
}
},{}]},{},[1]);