Разделитель групп в матрице данных GS1 с использованием REGEX - PullRequest
0 голосов
/ 15 апреля 2020

Мы используем матрицу данных GS1 (прилагается под изображением)
(01) 04056869021300
(240) 11020250
(422) 276
(21) 682321973

Здесь я я пытаюсь получить серийный номер. Мы знаем, что ИДЕНТИФИКАТОР ПРИЛОЖЕНИЯ с серийным номером (21) означает, что число после 21 - это серийный номер.

Говорят, что перед каждым ИИ есть невидимый символ <FNC1>, который используется для Разделителя групп, который также может быть <GS>, а его значение в Юникоде \\U001d

После сканирования приведенного ниже QR-кода, результат, который мы получаем в строке:
"scanText": "\u001d010405686902130021682321973\u001d24011020250\u001d422276"

, и мы используем следующее регулярное выражение для захвата серийного номера
регулярное выражение: (?:(?:(?:[a-zA-Z0-9-])|(?:\u001d))*21([a-zA-Z0-9-]{1,15})\u001d.*$)|(?:S?([a-zA-Z0-9-]{1,18}))

Здесь мы фиксируем все числа, которые идут после 21, но дело в том, что серийный номер имеет 21 результат, который я получаю 973

Вопрос:
После сканируя QR-код, в строке результата сканирования мы не находим никакого разделителя групп, например <FNC1> or <GS> Как это сделать? и как я могу использовать <FNC1> or <GS> в своем QR-коде? Как я могу отделить серийный номер?

const paragraph = '\u001d010405686902130021682321973\u001d24011020250\u001d422276';
const regex = "(?:(?:(?:[a-zA-Z0-9-])|(?:\u001d))*21([a-zA-Z0-9-]{1,15})\u001d.*$)|(?:S?([a-zA-Z0-9-]{1,18}))";
const found = paragraph.match(regex);

console.log(found);

enter image description here

...