UNPKG

foop

Version:

interfaces that describe their intentions.

71 lines (67 loc) 5.53 kB
var curry = require('../fp/curry') var isIn = require('../is/in') var ENV_PERF = require('../env/preferPerf') var FROZEN_ARRAY = require('../native/EMPTY_ARRAY') // const SymbolMatch = require('../symbols/match') // const hasOwnProperty = require('../is/nullOrUndefined') // could use `EMPTY_ARRAY` but being frozen may mess the matches... // pre-initialized, can cause side-effects var emptyArr = ENV_PERF ? FROZEN_ARRAY : [] /** * Tests a regular expression against a String. Note that this function will * return an empty array when there are no matches. This differs from * [`String.prototype.match`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) * which returns `null` when there are no matches. * * @since 5.0.0-beta.1 * @memberOf string * @curried 2 * * @param {RegExp} matchable A regular expression. * @param {String} str The string to match against * @return {Array} The list of matches or empty array. * * @see match/test * @func * @fork v0.1.0 * @category String * @sig RegExp -> String -> [String | Undefined] * * {@link https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/match mozilla-string-match} * @see {@link mozilla-string-match} * * @NOTE returned value from `match` is an ARRAY LIKE OBJECT * * @NOTE previously would throw * match(/a/, null) * //=> TypeError: null does not have a method named "match" * now returns empty array if nill * * * @example * * match(/([a-z]a)/g, 'bananas') * //=> ['ba', 'na', 'na'] * * match(/a/, 'b') * //=> [] * * @example * * var re = /foo/ * re[Symbol.match] = false * * '/foo/'.startsWith(re) * //=> true * * '/baz/'.endsWith(re) * //=> false * */ function match(matchable, str) { return isIn(str, 'match') ? str.match(matchable) || emptyArr : emptyArr } module.exports = curry(2, match) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2guanMiLCJzb3VyY2VzIjpbIm1hdGNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGN1cnJ5ID0gcmVxdWlyZSgnLi4vZnAvY3VycnknKVxuY29uc3QgaXNJbiA9IHJlcXVpcmUoJy4uL2lzL2luJylcbmNvbnN0IEVOVl9QRVJGID0gcmVxdWlyZSgnLi4vZW52L3ByZWZlclBlcmYnKVxuY29uc3QgRlJPWkVOX0FSUkFZID0gcmVxdWlyZSgnLi4vbmF0aXZlL0VNUFRZX0FSUkFZJylcbi8vIGNvbnN0IFN5bWJvbE1hdGNoID0gcmVxdWlyZSgnLi4vc3ltYm9scy9tYXRjaCcpXG4vLyBjb25zdCBoYXNPd25Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2lzL251bGxPclVuZGVmaW5lZCcpXG5cbi8vIGNvdWxkIHVzZSBgRU1QVFlfQVJSQVlgIGJ1dCBiZWluZyBmcm96ZW4gbWF5IG1lc3MgdGhlIG1hdGNoZXMuLi5cbi8vIHByZS1pbml0aWFsaXplZCwgY2FuIGNhdXNlIHNpZGUtZWZmZWN0c1xuY29uc3QgZW1wdHlBcnIgPSBFTlZfUEVSRiA/IEZST1pFTl9BUlJBWSA6IFtdXG5cbi8qKlxuICogVGVzdHMgYSByZWd1bGFyIGV4cHJlc3Npb24gYWdhaW5zdCBhIFN0cmluZy4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbFxuICogcmV0dXJuIGFuIGVtcHR5IGFycmF5IHdoZW4gdGhlcmUgYXJlIG5vIG1hdGNoZXMuIFRoaXMgZGlmZmVycyBmcm9tXG4gKiBbYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9TdHJpbmcvbWF0Y2gpXG4gKiB3aGljaCByZXR1cm5zIGBudWxsYCB3aGVuIHRoZXJlIGFyZSBubyBtYXRjaGVzLlxuICpcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjFcbiAqIEBtZW1iZXJPZiBzdHJpbmdcbiAqIEBjdXJyaWVkIDJcbiAqXG4gKiBAcGFyYW0ge1JlZ0V4cH0gbWF0Y2hhYmxlIEEgcmVndWxhciBleHByZXNzaW9uLlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIG1hdGNoIGFnYWluc3RcbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgbGlzdCBvZiBtYXRjaGVzIG9yIGVtcHR5IGFycmF5LlxuICpcbiAqIEBzZWUgbWF0Y2gvdGVzdFxuICogQGZ1bmNcbiAqIEBmb3JrIHYwLjEuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHNpZyBSZWdFeHAgLT4gU3RyaW5nIC0+IFtTdHJpbmcgfCBVbmRlZmluZWRdXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9tYXRjaCBtb3ppbGxhLXN0cmluZy1tYXRjaH1cbiAqIEBzZWUge0BsaW5rIG1vemlsbGEtc3RyaW5nLW1hdGNofVxuICpcbiAqIEBOT1RFIHJldHVybmVkIHZhbHVlIGZyb20gYG1hdGNoYCBpcyBhbiBBUlJBWSBMSUtFIE9CSkVDVFxuICpcbiAqIEBOT1RFIHByZXZpb3VzbHkgd291bGQgdGhyb3dcbiAqICAgICAgIG1hdGNoKC9hLywgbnVsbClcbiAqICAgICAgIC8vPT4gVHlwZUVycm9yOiBudWxsIGRvZXMgbm90IGhhdmUgYSBtZXRob2QgbmFtZWQgXCJtYXRjaFwiXG4gKiAgICAgICBub3cgcmV0dXJucyBlbXB0eSBhcnJheSBpZiBuaWxsXG4gKlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgIG1hdGNoKC8oW2Etel1hKS9nLCAnYmFuYW5hcycpXG4gKiAgICAgLy89PiBbJ2JhJywgJ25hJywgJ25hJ11cbiAqXG4gKiAgICAgbWF0Y2goL2EvLCAnYicpXG4gKiAgICAgLy89PiBbXVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgIHZhciByZSA9IC9mb28vXG4gKiAgICAgcmVbU3ltYm9sLm1hdGNoXSA9IGZhbHNlXG4gKlxuICogICAgICcvZm9vLycuc3RhcnRzV2l0aChyZSlcbiAqICAgICAvLz0+IHRydWVcbiAqXG4gKiAgICAgJy9iYXovJy5lbmRzV2l0aChyZSlcbiAqICAgICAvLz0+IGZhbHNlXG4gKlxuICovXG5mdW5jdGlvbiBtYXRjaChtYXRjaGFibGUsIHN0cikge1xuICByZXR1cm4gaXNJbihzdHIsICdtYXRjaCcpXG4gICAgPyBzdHIubWF0Y2gobWF0Y2hhYmxlKSB8fCBlbXB0eUFyclxuICAgIDogZW1wdHlBcnJcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeSgyLCBtYXRjaClcbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ2hDQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQztBQUM3Q0EsR0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7Ozs7OztBQU1yREEsR0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsWUFBWSxHQUFHLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUQ3QyxTQUFTLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO0VBQzdCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7TUFDckIsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRO01BQ2hDLFFBQVE7Q0FDYjs7QUFFRCxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDOyJ9