| // We copy the regular expression so as to be able to always ensure the exec |
| // expression is a global one (and thereby prevent recursion) |
| |
| /* eslint-disable no-extend-native, |
| no-use-extend-native/no-use-extend-native, |
| node/no-unsupported-features/es-syntax */ |
| |
| import mixinRegex from './mixinRegex.js'; |
| |
| String.prototype.forEach = function (regex, cb, thisObj = null) { |
| let matches, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| cb.apply(thisObj, matches.concat(i++, n0)); |
| } |
| return this; |
| }; |
| |
| String.prototype.some = function (regex, cb, thisObj = null) { |
| let matches, ret, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| ret = cb.apply(thisObj, matches.concat(i++, n0)); |
| if (ret) { |
| return true; |
| } |
| } |
| return false; |
| }; |
| |
| String.prototype.every = function (regex, cb, thisObj = null) { |
| let matches, ret, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| ret = cb.apply(thisObj, matches.concat(i++, n0)); |
| if (!ret) { |
| return false; |
| } |
| } |
| return true; |
| }; |
| |
| String.prototype.map = function (regex, cb, thisObj = null) { |
| let matches, n0, i = 0; |
| const ret = []; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| ret.push(cb.apply(thisObj, matches.concat(i++, n0))); |
| } |
| return ret; |
| }; |
| |
| String.prototype.filter = function (regex, cb, thisObj = null) { |
| let matches, n0, i = 0; |
| const ret = []; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| matches = matches.concat(i++, n0); |
| if (cb.apply(thisObj, matches)) { |
| ret.push(n0[0]); |
| } |
| } |
| return ret; |
| }; |
| |
| String.prototype.reduce = function (regex, cb, prev, thisObj = null) { |
| let matches, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| if (!prev) { |
| if ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| prev = cb.apply(thisObj, [''].concat(matches.concat(i++, n0))); |
| } |
| } |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| prev = cb.apply(thisObj, [prev].concat(matches.concat(i++, n0))); |
| } |
| return prev; |
| }; |
| |
| String.prototype.reduceRight = function (regex, cb, prevOrig, thisObjOrig) { |
| let matches, n0, i, |
| prev = prevOrig, thisObj = thisObjOrig; |
| const matchesContainer = []; |
| regex = mixinRegex(regex, 'g'); |
| thisObj = thisObj || null; |
| while ((matches = regex.exec(this)) !== null) { |
| matchesContainer.push(matches); |
| } |
| i = matchesContainer.length; |
| if (!i) { |
| if (arguments.length < 3) { |
| throw new TypeError( |
| 'reduce of empty matches array with no initial value' |
| ); |
| } |
| return prev; |
| } |
| if (!prev) { |
| matches = matchesContainer.splice(-1)[0]; |
| n0 = matches.splice(0, 1); |
| prev = cb.apply(thisObj, [''].concat(matches.concat(i--, n0))); |
| } |
| matchesContainer.reduceRight(function (container, mtches) { |
| n0 = mtches.splice(0, 1); |
| prev = cb.apply(thisObj, [prev].concat(mtches.concat(i--, n0))); |
| return container; |
| }, matchesContainer); |
| return prev; |
| }; |
| |
| String.prototype.find = function (regex, cb, thisObj = null) { |
| let matches, ret, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| ret = cb.apply(thisObj, matches.concat(i++, n0)); |
| if (ret) { |
| return n0[0]; |
| } |
| } |
| return false; |
| }; |
| |
| String.prototype.findIndex = function (regex, cb, thisObj = null) { |
| let matches, ret, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| ret = cb.apply(thisObj, matches.concat(i++, n0)); |
| if (ret) { |
| return i - 1; |
| } |
| } |
| return -1; |
| }; |
| |
| String.prototype.findExec = function (regex, cb, thisObj = null) { |
| let matches, ret, n0, i = 0; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| ret = cb.apply(thisObj, matches.concat(i++, n0)); |
| if (ret) { |
| return matches; |
| } |
| } |
| return false; |
| }; |
| |
| String.prototype.filterExec = function (regex, cb, thisObj = null) { |
| let matches, n0, i = 0; |
| const ret = []; |
| regex = mixinRegex(regex, 'g'); |
| while ((matches = regex.exec(this)) !== null) { |
| n0 = matches.splice(0, 1); |
| matches.push(i++, n0[0]); |
| if (cb.apply(thisObj, matches)) { |
| ret.push(matches); |
| } |
| } |
| return ret; |
| }; |