match.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.js";
  2. import { buildMatchFn } from "../../_lib/buildMatchFn.js";
  3. const matchOrdinalNumberPattern = /^第?\d+(年|四半期|月|週|日|時|分|秒)?/i;
  4. const parseOrdinalNumberPattern = /\d+/i;
  5. const matchEraPatterns = {
  6. narrow: /^(B\.?C\.?|A\.?D\.?)/i,
  7. abbreviated: /^(紀元[前後]|西暦)/i,
  8. wide: /^(紀元[前後]|西暦)/i,
  9. };
  10. const parseEraPatterns = {
  11. narrow: [/^B/i, /^A/i],
  12. any: [/^(紀元前)/i, /^(西暦|紀元後)/i],
  13. };
  14. const matchQuarterPatterns = {
  15. narrow: /^[1234]/i,
  16. abbreviated: /^Q[1234]/i,
  17. wide: /^第[1234一二三四1234]四半期/i,
  18. };
  19. const parseQuarterPatterns = {
  20. any: [/(1|一|1)/i, /(2|二|2)/i, /(3|三|3)/i, /(4|四|4)/i],
  21. };
  22. const matchMonthPatterns = {
  23. narrow: /^([123456789]|1[012])/,
  24. abbreviated: /^([123456789]|1[012])月/i,
  25. wide: /^([123456789]|1[012])月/i,
  26. };
  27. const parseMonthPatterns = {
  28. any: [
  29. /^1\D/,
  30. /^2/,
  31. /^3/,
  32. /^4/,
  33. /^5/,
  34. /^6/,
  35. /^7/,
  36. /^8/,
  37. /^9/,
  38. /^10/,
  39. /^11/,
  40. /^12/,
  41. ],
  42. };
  43. const matchDayPatterns = {
  44. narrow: /^[日月火水木金土]/,
  45. short: /^[日月火水木金土]/,
  46. abbreviated: /^[日月火水木金土]/,
  47. wide: /^[日月火水木金土]曜日/,
  48. };
  49. const parseDayPatterns = {
  50. any: [/^日/, /^月/, /^火/, /^水/, /^木/, /^金/, /^土/],
  51. };
  52. const matchDayPeriodPatterns = {
  53. any: /^(AM|PM|午前|午後|正午|深夜|真夜中|夜|朝)/i,
  54. };
  55. const parseDayPeriodPatterns = {
  56. any: {
  57. am: /^(A|午前)/i,
  58. pm: /^(P|午後)/i,
  59. midnight: /^深夜|真夜中/i,
  60. noon: /^正午/i,
  61. morning: /^朝/i,
  62. afternoon: /^午後/i,
  63. evening: /^夜/i,
  64. night: /^深夜/i,
  65. },
  66. };
  67. export const match = {
  68. ordinalNumber: buildMatchPatternFn({
  69. matchPattern: matchOrdinalNumberPattern,
  70. parsePattern: parseOrdinalNumberPattern,
  71. valueCallback: function (value) {
  72. return parseInt(value, 10);
  73. },
  74. }),
  75. era: buildMatchFn({
  76. matchPatterns: matchEraPatterns,
  77. defaultMatchWidth: "wide",
  78. parsePatterns: parseEraPatterns,
  79. defaultParseWidth: "any",
  80. }),
  81. quarter: buildMatchFn({
  82. matchPatterns: matchQuarterPatterns,
  83. defaultMatchWidth: "wide",
  84. parsePatterns: parseQuarterPatterns,
  85. defaultParseWidth: "any",
  86. valueCallback: (index) => index + 1,
  87. }),
  88. month: buildMatchFn({
  89. matchPatterns: matchMonthPatterns,
  90. defaultMatchWidth: "wide",
  91. parsePatterns: parseMonthPatterns,
  92. defaultParseWidth: "any",
  93. }),
  94. day: buildMatchFn({
  95. matchPatterns: matchDayPatterns,
  96. defaultMatchWidth: "wide",
  97. parsePatterns: parseDayPatterns,
  98. defaultParseWidth: "any",
  99. }),
  100. dayPeriod: buildMatchFn({
  101. matchPatterns: matchDayPeriodPatterns,
  102. defaultMatchWidth: "any",
  103. parsePatterns: parseDayPeriodPatterns,
  104. defaultParseWidth: "any",
  105. }),
  106. };