regex.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import { hasOwnProp, isFunction } from '../utils/type-checks';
  6. /** @type {?} */
  7. export const match1 = /\d/;
  8. // 0 - 9
  9. /** @type {?} */
  10. export const match2 = /\d\d/;
  11. // 00 - 99
  12. /** @type {?} */
  13. export const match3 = /\d{3}/;
  14. // 000 - 999
  15. /** @type {?} */
  16. export const match4 = /\d{4}/;
  17. // 0000 - 9999
  18. /** @type {?} */
  19. export const match6 = /[+-]?\d{6}/;
  20. // -999999 - 999999
  21. /** @type {?} */
  22. export const match1to2 = /\d\d?/;
  23. // 0 - 99
  24. /** @type {?} */
  25. export const match3to4 = /\d\d\d\d?/;
  26. // 999 - 9999
  27. /** @type {?} */
  28. export const match5to6 = /\d\d\d\d\d\d?/;
  29. // 99999 - 999999
  30. /** @type {?} */
  31. export const match1to3 = /\d{1,3}/;
  32. // 0 - 999
  33. /** @type {?} */
  34. export const match1to4 = /\d{1,4}/;
  35. // 0 - 9999
  36. /** @type {?} */
  37. export const match1to6 = /[+-]?\d{1,6}/;
  38. // -999999 - 999999
  39. /** @type {?} */
  40. export const matchUnsigned = /\d+/;
  41. // 0 - inf
  42. /** @type {?} */
  43. export const matchSigned = /[+-]?\d+/;
  44. // -inf - inf
  45. /** @type {?} */
  46. export const matchOffset = /Z|[+-]\d\d:?\d\d/gi;
  47. // +00:00 -00:00 +0000 -0000 or Z
  48. /** @type {?} */
  49. export const matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi;
  50. // +00 -00 +00:00 -00:00 +0000 -0000 or Z
  51. /** @type {?} */
  52. export const matchTimestamp = /[+-]?\d+(\.\d{1,3})?/;
  53. // 123456789 123456789.123
  54. // any word (or two) characters or numbers including two/three word month in arabic.
  55. // includes scottish gaelic two word and hyphenated months
  56. // tslint:disable-next-line
  57. /** @type {?} */
  58. export const matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;
  59. /** @type {?} */
  60. const regexes = {};
  61. /**
  62. * @param {?} token
  63. * @param {?} regex
  64. * @param {?=} strictRegex
  65. * @return {?}
  66. */
  67. export function addRegexToken(token, regex, strictRegex) {
  68. if (isFunction(regex)) {
  69. regexes[token] = regex;
  70. return;
  71. }
  72. regexes[token] = (/**
  73. * @param {?} isStrict
  74. * @param {?} locale
  75. * @return {?}
  76. */
  77. function (isStrict, locale) {
  78. return (isStrict && strictRegex) ? strictRegex : regex;
  79. });
  80. }
  81. /**
  82. * @param {?} token
  83. * @param {?} locale
  84. * @return {?}
  85. */
  86. export function getParseRegexForToken(token, locale) {
  87. /** @type {?} */
  88. const _strict = false;
  89. if (!hasOwnProp(regexes, token)) {
  90. return new RegExp(unescapeFormat(token));
  91. }
  92. return regexes[token](_strict, locale);
  93. }
  94. // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
  95. /**
  96. * @param {?} str
  97. * @return {?}
  98. */
  99. function unescapeFormat(str) {
  100. // tslint:disable-next-line
  101. return regexEscape(str
  102. .replace('\\', '')
  103. .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, (/**
  104. * @param {?} matched
  105. * @param {?} p1
  106. * @param {?} p2
  107. * @param {?} p3
  108. * @param {?} p4
  109. * @return {?}
  110. */
  111. (matched, p1, p2, p3, p4) => p1 || p2 || p3 || p4)));
  112. }
  113. /**
  114. * @param {?} str
  115. * @return {?}
  116. */
  117. export function regexEscape(str) {
  118. return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
  119. }
  120. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYm9vdHN0cmFwL2Nocm9ub3MvIiwic291cmNlcyI6WyJwYXJzZS9yZWdleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFHOUQsTUFBTSxPQUFPLE1BQU0sR0FBRyxJQUFJOzs7QUFDMUIsTUFBTSxPQUFPLE1BQU0sR0FBRyxNQUFNOzs7QUFDNUIsTUFBTSxPQUFPLE1BQU0sR0FBRyxPQUFPOzs7QUFDN0IsTUFBTSxPQUFPLE1BQU0sR0FBRyxPQUFPOzs7QUFDN0IsTUFBTSxPQUFPLE1BQU0sR0FBRyxZQUFZOzs7QUFDbEMsTUFBTSxPQUFPLFNBQVMsR0FBRyxPQUFPOzs7QUFDaEMsTUFBTSxPQUFPLFNBQVMsR0FBRyxXQUFXOzs7QUFDcEMsTUFBTSxPQUFPLFNBQVMsR0FBRyxlQUFlOzs7QUFDeEMsTUFBTSxPQUFPLFNBQVMsR0FBRyxTQUFTOzs7QUFDbEMsTUFBTSxPQUFPLFNBQVMsR0FBRyxTQUFTOzs7QUFDbEMsTUFBTSxPQUFPLFNBQVMsR0FBRyxjQUFjOzs7QUFFdkMsTUFBTSxPQUFPLGFBQWEsR0FBRyxLQUFLOzs7QUFDbEMsTUFBTSxPQUFPLFdBQVcsR0FBRyxVQUFVOzs7QUFFckMsTUFBTSxPQUFPLFdBQVcsR0FBRyxvQkFBb0I7OztBQUMvQyxNQUFNLE9BQU8sZ0JBQWdCLEdBQUcseUJBQXlCOzs7QUFFekQsTUFBTSxPQUFPLGNBQWMsR0FBRyxzQkFBc0I7Ozs7OztBQUtwRCxNQUFNLE9BQU8sU0FBUyxHQUFHLDBJQUEwSTs7TUFHN0osT0FBTyxHQUFtQyxFQUFFOzs7Ozs7O0FBR2xELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLEtBQTZCLEVBQUUsV0FBb0I7SUFDOUYsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUV2QixPQUFPO0tBQ1I7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDOzs7OztJQUFHLFVBQVUsUUFBaUIsRUFBRSxNQUFjO1FBQzFELE9BQU8sQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pELENBQUMsQ0FBQSxDQUFDO0FBQ0osQ0FBQzs7Ozs7O0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxNQUFjOztVQUMzRCxPQUFPLEdBQUcsS0FBSztJQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTtRQUMvQixPQUFPLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0tBQzFDO0lBRUQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7Ozs7OztBQUdELFNBQVMsY0FBYyxDQUFDLEdBQVc7SUFDakMsMkJBQTJCO0lBQzNCLE9BQU8sV0FBVyxDQUFDLEdBQUc7U0FDbkIsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7U0FDakIsT0FBTyxDQUFDLHFDQUFxQzs7Ozs7Ozs7SUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBQyxDQUNuRyxDQUFDO0FBQ0osQ0FBQzs7Ozs7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQVc7SUFDckMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNPd25Qcm9wLCBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS1jaGVja3MnO1xuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZS5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBtYXRjaDEgPSAvXFxkLzsgICAgICAgICAgICAvLyAgICAgICAwIC0gOVxuZXhwb3J0IGNvbnN0IG1hdGNoMiA9IC9cXGRcXGQvOyAgICAgICAgICAvLyAgICAgIDAwIC0gOTlcbmV4cG9ydCBjb25zdCBtYXRjaDMgPSAvXFxkezN9LzsgICAgICAgICAvLyAgICAgMDAwIC0gOTk5XG5leHBvcnQgY29uc3QgbWF0Y2g0ID0gL1xcZHs0fS87ICAgICAgICAgLy8gICAgMDAwMCAtIDk5OTlcbmV4cG9ydCBjb25zdCBtYXRjaDYgPSAvWystXT9cXGR7Nn0vOyAgICAvLyAtOTk5OTk5IC0gOTk5OTk5XG5leHBvcnQgY29uc3QgbWF0Y2gxdG8yID0gL1xcZFxcZD8vOyAgICAgICAgIC8vICAgICAgIDAgLSA5OVxuZXhwb3J0IGNvbnN0IG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LzsgICAgIC8vICAgICA5OTkgLSA5OTk5XG5leHBvcnQgY29uc3QgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vOyAvLyAgIDk5OTk5IC0gOTk5OTk5XG5leHBvcnQgY29uc3QgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LzsgICAgICAgLy8gICAgICAgMCAtIDk5OVxuZXhwb3J0IGNvbnN0IG1hdGNoMXRvNCA9IC9cXGR7MSw0fS87ICAgICAgIC8vICAgICAgIDAgLSA5OTk5XG5leHBvcnQgY29uc3QgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vOyAgLy8gLTk5OTk5OSAtIDk5OTk5OVxuXG5leHBvcnQgY29uc3QgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLzsgICAgICAgICAgIC8vICAgICAgIDAgLSBpbmZcbmV4cG9ydCBjb25zdCBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvOyAgICAgIC8vICAgIC1pbmYgLSBpbmZcblxuZXhwb3J0IGNvbnN0IG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpOyAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbmV4cG9ydCBjb25zdCBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2k7IC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG5cbmV4cG9ydCBjb25zdCBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy87IC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG5cbi8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5leHBvcnQgY29uc3QgbWF0Y2hXb3JkID0gL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2k7XG5cbmV4cG9ydCB0eXBlIFJlZ0V4cFRva2VuRm4gPSAoaXNTdHJpY3Q6IGJvb2xlYW4sIGxvY2FsZTogTG9jYWxlKSA9PiBSZWdFeHA7XG5jb25zdCByZWdleGVzOiB7W2tleTogc3RyaW5nXTogUmVnRXhwVG9rZW5Gbn0gPSB7fTtcblxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbjogc3RyaW5nLCByZWdleDogUmVnRXhwIHwgUmVnRXhwVG9rZW5Gbiwgc3RyaWN0UmVnZXg/OiBSZWdFeHApOiB2b2lkIHtcbiAgaWYgKGlzRnVuY3Rpb24ocmVnZXgpKSB7XG4gICAgcmVnZXhlc1t0b2tlbl0gPSByZWdleDtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHJlZ2V4ZXNbdG9rZW5dID0gZnVuY3Rpb24gKGlzU3RyaWN0OiBib29sZWFuLCBsb2NhbGU6IExvY2FsZSkge1xuICAgIHJldHVybiAoaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXgpID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbjogc3RyaW5nLCBsb2NhbGU6IExvY2FsZSk6IFJlZ0V4cCB7XG4gIGNvbnN0IF9zdHJpY3QgPSBmYWxzZTtcbiAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gIH1cblxuICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oX3N0cmljdCwgbG9jYWxlKTtcbn1cblxuLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgcmV0dXJuIHJlZ2V4RXNjYXBlKHN0clxuICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgLnJlcGxhY2UoL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZywgKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSA9PiBwMSB8fCBwMiB8fCBwMyB8fCBwNClcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbn1cbiJdfQ==