_stringToPath.js
 1  var memoizeCapped = require('./_memoizeCapped');
 2  
 3  /** Used to match property names within property paths. */
 4  var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
 5  
 6  /** Used to match backslashes in property paths. */
 7  var reEscapeChar = /\\(\\)?/g;
 8  
 9  /**
10   * Converts `string` to a property path array.
11   *
12   * @private
13   * @param {string} string The string to convert.
14   * @returns {Array} Returns the property path array.
15   */
16  var stringToPath = memoizeCapped(function(string) {
17    var result = [];
18    if (string.charCodeAt(0) === 46 /* . */) {
19      result.push('');
20    }
21    string.replace(rePropName, function(match, number, quote, subString) {
22      result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
23    });
24    return result;
25  });
26  
27  module.exports = stringToPath;