| var memoizeCapped = require('./_memoizeCapped'); |
| |
| /** Used to match property names within property paths. */ |
| var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; |
| |
| /** Used to match backslashes in property paths. */ |
| var reEscapeChar = /\\(\\)?/g; |
| |
| /** |
| * Converts `string` to a property path array. |
| * |
| * @private |
| * @param {string} string The string to convert. |
| * @returns {Array} Returns the property path array. |
| */ |
| var stringToPath = memoizeCapped(function(string) { |
| var result = []; |
| if (string.charCodeAt(0) === 46 /* . */) { |
| result.push(''); |
| } |
| string.replace(rePropName, function(match, number, quote, subString) { |
| result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); |
| }); |
| return result; |
| }); |
| |
| module.exports = stringToPath; |