diff --git a/src/ocr-extract.js b/src/ocr-extract.js index 1572585..9f305e0 100644 --- a/src/ocr-extract.js +++ b/src/ocr-extract.js @@ -7,7 +7,10 @@ const CAPACITY_PATTERN = /\b([0-9OQBSIL]{1,3})\s?GB\b/g; // Kein \b am Ende: auf Etiketten folgt der Geschwindigkeit oft direkt // ein Buchstabe (PC4-2400T), und dort gibt es keine Wortgrenze. const SPEED_PATTERN = /\bPC4[-\s]?([0-9OQ]{4})/g; -const RANK_PATTERN = /\b([0-9OQ][DS]?R[Xx][0-9OQ])\b/g; +// Nur Grossbuchstabe X: der Text ist an dieser Stelle bereits vollstaendig +// grossgeschrieben (siehe normalizeToken/text unten), ein kleines x kann +// hier also nie ankommen - die entsprechende Alternative waere toter Code. +const RANK_PATTERN = /\b([0-9OQ][DS]?RX[0-9OQ])\b/g; const PART_NUMBER_PATTERN = /\b([A-Z]{1,3}[0-9]{2,4}[A-Z0-9]{4,}(?:-[A-Z0-9]{2,6})?)\b/g; const DATE_CODE_PATTERN = /(?:^|\s)([0-9]{4})(?=\s|$)/g; diff --git a/test/ocr-extract.test.js b/test/ocr-extract.test.js index e50bb1b..781e39d 100644 --- a/test/ocr-extract.test.js +++ b/test/ocr-extract.test.js @@ -60,7 +60,7 @@ test('waehlt bei der Teilenummer den laengsten Bindestrich-Kandidaten, nicht den assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y'); }); -test('verwirft den Datumscode, wenn mehrere vierstellige Bloecke vorkommen und nur einer plausibel ist', () => { +test('bei mehreren plausiblen Datumscode-Kandidaten gewinnt der zuletzt vorkommende', () => { const spec = extractFields('SAMSUNG\n1234 5678\n64GB 2Rx4 PC4-2666\n9012\n1908'); assert.equal(spec.dateCode, '1908'); });