unescape.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. /**
  2. * Un-escape a string that has been escaped with {@link escape}.
  3. *
  4. * If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then
  5. * square-bracket escapes are removed, but not backslash escapes.
  6. *
  7. * For example, it will turn the string `'[*]'` into `*`, but it will not
  8. * turn `'\\*'` into `'*'`, because `\` is a path separator in
  9. * `windowsPathsNoEscape` mode.
  10. *
  11. * When `windowsPathsNoEscape` is not set, then both square-bracket escapes and
  12. * backslash escapes are removed.
  13. *
  14. * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
  15. * or unescaped.
  16. *
  17. * When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be
  18. * unescaped.
  19. */
  20. export const unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true, } = {}) => {
  21. if (magicalBraces) {
  22. return windowsPathsNoEscape ?
  23. s.replace(/\[([^/\\])\]/g, '$1')
  24. : s
  25. .replace(/((?!\\).|^)\[([^/\\])\]/g, '$1$2')
  26. .replace(/\\([^/])/g, '$1');
  27. }
  28. return windowsPathsNoEscape ?
  29. s.replace(/\[([^/\\{}])\]/g, '$1')
  30. : s
  31. .replace(/((?!\\).|^)\[([^/\\{}])\]/g, '$1$2')
  32. .replace(/\\([^/{}])/g, '$1');
  33. };
  34. //# sourceMappingURL=unescape.js.map