match.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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: /^ל(ספירה|פנה״ס)/i,
  8. abbreviated: /^ל(ספירה|פנה״ס)/i,
  9. wide: /^ל(פני ה)?ספירה/i,
  10. };
  11. const parseEraPatterns = {
  12. any: [/^לפ/i, /^לס/i],
  13. };
  14. const matchQuarterPatterns = {
  15. narrow: /^[1234]/i,
  16. abbreviated: /^q[1234]/i,
  17. wide: /^רבעון [1234]/i,
  18. };
  19. const parseQuarterPatterns = {
  20. any: [/1/i, /2/i, /3/i, /4/i],
  21. };
  22. const matchMonthPatterns = {
  23. narrow: /^\d+/i,
  24. abbreviated: /^(ינו|פבר|מרץ|אפר|מאי|יוני|יולי|אוג|ספט|אוק|נוב|דצמ)׳?/i,
  25. wide: /^(ינואר|פברואר|מרץ|אפריל|מאי|יוני|יולי|אוגוסט|ספטמבר|אוקטובר|נובמבר|דצמבר)/i,
  26. };
  27. const parseMonthPatterns = {
  28. narrow: [
  29. /^1$/i,
  30. /^2/i,
  31. /^3/i,
  32. /^4/i,
  33. /^5/i,
  34. /^6/i,
  35. /^7/i,
  36. /^8/i,
  37. /^9/i,
  38. /^10/i,
  39. /^11/i,
  40. /^12/i,
  41. ],
  42. any: [
  43. /^ינ/i,
  44. /^פ/i,
  45. /^מר/i,
  46. /^אפ/i,
  47. /^מא/i,
  48. /^יונ/i,
  49. /^יול/i,
  50. /^אוג/i,
  51. /^ס/i,
  52. /^אוק/i,
  53. /^נ/i,
  54. /^ד/i,
  55. ],
  56. };
  57. const matchDayPatterns = {
  58. narrow: /^[אבגדהוש]׳/i,
  59. short: /^[אבגדהוש]׳/i,
  60. abbreviated: /^(שבת|יום (א|ב|ג|ד|ה|ו)׳)/i,
  61. wide: /^יום (ראשון|שני|שלישי|רביעי|חמישי|שישי|שבת)/i,
  62. };
  63. const parseDayPatterns = {
  64. abbreviated: [/א׳$/i, /ב׳$/i, /ג׳$/i, /ד׳$/i, /ה׳$/i, /ו׳$/i, /^ש/i],
  65. wide: [/ן$/i, /ני$/i, /לישי$/i, /עי$/i, /מישי$/i, /שישי$/i, /ת$/i],
  66. any: [/^א/i, /^ב/i, /^ג/i, /^ד/i, /^ה/i, /^ו/i, /^ש/i],
  67. };
  68. const matchDayPeriodPatterns = {
  69. any: /^(אחר ה|ב)?(חצות|צהריים|בוקר|ערב|לילה|אחה״צ|לפנה״צ)/i,
  70. };
  71. const parseDayPeriodPatterns = {
  72. any: {
  73. am: /^לפ/i,
  74. pm: /^אחה/i,
  75. midnight: /^ח/i,
  76. noon: /^צ/i,
  77. morning: /בוקר/i,
  78. afternoon: /בצ|אחר/i,
  79. evening: /ערב/i,
  80. night: /לילה/i,
  81. },
  82. };
  83. const ordinalName = ["רא", "שנ", "של", "רב", "ח", "שי", "שב", "שמ", "ת", "ע"];
  84. export const match = {
  85. ordinalNumber: buildMatchPatternFn({
  86. matchPattern: matchOrdinalNumberPattern,
  87. parsePattern: parseOrdinalNumberPattern,
  88. valueCallback: (value) => {
  89. const number = parseInt(value, 10);
  90. return isNaN(number) ? ordinalName.indexOf(value) + 1 : number;
  91. },
  92. }),
  93. era: buildMatchFn({
  94. matchPatterns: matchEraPatterns,
  95. defaultMatchWidth: "wide",
  96. parsePatterns: parseEraPatterns,
  97. defaultParseWidth: "any",
  98. }),
  99. quarter: buildMatchFn({
  100. matchPatterns: matchQuarterPatterns,
  101. defaultMatchWidth: "wide",
  102. parsePatterns: parseQuarterPatterns,
  103. defaultParseWidth: "any",
  104. valueCallback: (index) => index + 1,
  105. }),
  106. month: buildMatchFn({
  107. matchPatterns: matchMonthPatterns,
  108. defaultMatchWidth: "wide",
  109. parsePatterns: parseMonthPatterns,
  110. defaultParseWidth: "any",
  111. }),
  112. day: buildMatchFn({
  113. matchPatterns: matchDayPatterns,
  114. defaultMatchWidth: "wide",
  115. parsePatterns: parseDayPatterns,
  116. defaultParseWidth: "any",
  117. }),
  118. dayPeriod: buildMatchFn({
  119. matchPatterns: matchDayPeriodPatterns,
  120. defaultMatchWidth: "any",
  121. parsePatterns: parseDayPeriodPatterns,
  122. defaultParseWidth: "any",
  123. }),
  124. };