28 lines
		
	
	
		
			840 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			840 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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;
 |