split.js
 1  var baseToString = require('./_baseToString'),
 2      castSlice = require('./_castSlice'),
 3      hasUnicode = require('./_hasUnicode'),
 4      isIterateeCall = require('./_isIterateeCall'),
 5      isRegExp = require('./isRegExp'),
 6      stringToArray = require('./_stringToArray'),
 7      toString = require('./toString');
 8  
 9  /** Used as references for the maximum length and index of an array. */
10  var MAX_ARRAY_LENGTH = 4294967295;
11  
12  /**
13   * Splits `string` by `separator`.
14   *
15   * **Note:** This method is based on
16   * [`String#split`](https://mdn.io/String/split).
17   *
18   * @static
19   * @memberOf _
20   * @since 4.0.0
21   * @category String
22   * @param {string} [string=''] The string to split.
23   * @param {RegExp|string} separator The separator pattern to split by.
24   * @param {number} [limit] The length to truncate results to.
25   * @returns {Array} Returns the string segments.
26   * @example
27   *
28   * _.split('a-b-c', '-', 2);
29   * // => ['a', 'b']
30   */
31  function split(string, separator, limit) {
32    if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
33      separator = limit = undefined;
34    }
35    limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
36    if (!limit) {
37      return [];
38    }
39    string = toString(string);
40    if (string && (
41          typeof separator == 'string' ||
42          (separator != null && !isRegExp(separator))
43        )) {
44      separator = baseToString(separator);
45      if (!separator && hasUnicode(string)) {
46        return castSlice(stringToArray(string), 0, limit);
47      }
48    }
49    return string.split(separator, limit);
50  }
51  
52  module.exports = split;