time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

_stringToPath.js (840B)


      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;