diff --git a/.internal/stringToPath.js b/.internal/stringToPath.js index 4a73d3c76..2c181bf8d 100644 --- a/.internal/stringToPath.js +++ b/.internal/stringToPath.js @@ -2,7 +2,20 @@ import memoizeCapped from './memoizeCapped.js' /** Used to match property names within property paths. */ const reLeadingDot = /^\./ -const rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g + +const rePropName = RegExp([ + // Match anything that isn't a dot or bracket. + '[^.[\\]]+', + // Or match property names within brackets. + '\\[(?:' + + // Match numbers. + '(-?\\d+(?:\\.\\d+)?)' + '|' + + // Or match strings (supports escaping quotation marks). + '(["\'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2' + + ')\\]', + // Or match "" as the space between consecutive dots or empty brackets. + '(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))' +].join('|'), 'g') /** Used to match backslashes in property paths. */ const reEscapeChar = /\\(\\)?/g