foop
Version:
interfaces that describe their intentions.
71 lines (67 loc) • 5.53 kB
JavaScript
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