match.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import { buildMatchFn } from "../../_lib/buildMatchFn.js";
  2. import { buildMatchPatternFn } from "../../_lib/buildMatchPatternFn.js";
  3. const matchOrdinalNumberPattern =
  4. /^だ?い?\d+(ねん|しはんき|がつ|しゅう|にち|じ|ふん|びょう)?/i;
  5. const parseOrdinalNumberPattern = /\d+/i;
  6. const matchEraPatterns = {
  7. narrow: /^(B\.?C\.?|A\.?D\.?)/i,
  8. abbreviated: /^(きげん[前後]|せいれき)/i,
  9. wide: /^(きげん[前後]|せいれき)/i,
  10. };
  11. const parseEraPatterns = {
  12. narrow: [/^B/i, /^A/i],
  13. any: [/^(きげんぜん)/i, /^(せいれき|きげんご)/i],
  14. };
  15. const matchQuarterPatterns = {
  16. narrow: /^[1234]/i,
  17. abbreviated: /^Q[1234]/i,
  18. wide: /^だい[1234一二三四1234]しはんき/i,
  19. };
  20. const parseQuarterPatterns = {
  21. any: [/(1|一|1)/i, /(2|二|2)/i, /(3|三|3)/i, /(4|四|4)/i],
  22. };
  23. const matchMonthPatterns = {
  24. narrow: /^([123456789]|1[012])/,
  25. abbreviated: /^([123456789]|1[012])がつ/i,
  26. wide: /^([123456789]|1[012])がつ/i,
  27. };
  28. const parseMonthPatterns = {
  29. any: [
  30. /^1\D/,
  31. /^2/,
  32. /^3/,
  33. /^4/,
  34. /^5/,
  35. /^6/,
  36. /^7/,
  37. /^8/,
  38. /^9/,
  39. /^10/,
  40. /^11/,
  41. /^12/,
  42. ],
  43. };
  44. const matchDayPatterns = {
  45. narrow: /^(にち|げつ|か|すい|もく|きん|ど)/,
  46. short: /^(にち|げつ|か|すい|もく|きん|ど)/,
  47. abbreviated: /^(にち|げつ|か|すい|もく|きん|ど)/,
  48. wide: /^(にち|げつ|か|すい|もく|きん|ど)ようび/,
  49. };
  50. const parseDayPatterns = {
  51. any: [/^にち/, /^げつ/, /^か/, /^すい/, /^もく/, /^きん/, /^ど/],
  52. };
  53. const matchDayPeriodPatterns = {
  54. any: /^(AM|PM|ごぜん|ごご|しょうご|しんや|まよなか|よる|あさ)/i,
  55. };
  56. const parseDayPeriodPatterns = {
  57. any: {
  58. am: /^(A|ごぜん)/i,
  59. pm: /^(P|ごご)/i,
  60. midnight: /^しんや|まよなか/i,
  61. noon: /^しょうご/i,
  62. morning: /^あさ/i,
  63. afternoon: /^ごご/i,
  64. evening: /^よる/i,
  65. night: /^しんや/i,
  66. },
  67. };
  68. export const match = {
  69. ordinalNumber: buildMatchPatternFn({
  70. matchPattern: matchOrdinalNumberPattern,
  71. parsePattern: parseOrdinalNumberPattern,
  72. valueCallback: function (value) {
  73. return parseInt(value, 10);
  74. },
  75. }),
  76. era: buildMatchFn({
  77. matchPatterns: matchEraPatterns,
  78. defaultMatchWidth: "wide",
  79. parsePatterns: parseEraPatterns,
  80. defaultParseWidth: "any",
  81. }),
  82. quarter: buildMatchFn({
  83. matchPatterns: matchQuarterPatterns,
  84. defaultMatchWidth: "wide",
  85. parsePatterns: parseQuarterPatterns,
  86. defaultParseWidth: "any",
  87. valueCallback: (index) => index + 1,
  88. }),
  89. month: buildMatchFn({
  90. matchPatterns: matchMonthPatterns,
  91. defaultMatchWidth: "wide",
  92. parsePatterns: parseMonthPatterns,
  93. defaultParseWidth: "any",
  94. }),
  95. day: buildMatchFn({
  96. matchPatterns: matchDayPatterns,
  97. defaultMatchWidth: "wide",
  98. parsePatterns: parseDayPatterns,
  99. defaultParseWidth: "any",
  100. }),
  101. dayPeriod: buildMatchFn({
  102. matchPatterns: matchDayPeriodPatterns,
  103. defaultMatchWidth: "any",
  104. parsePatterns: parseDayPeriodPatterns,
  105. defaultParseWidth: "any",
  106. }),
  107. };