diff --git a/src/backend/utils/adif-parser.js b/src/backend/utils/adif-parser.js index b0cc798..f135613 100644 --- a/src/backend/utils/adif-parser.js +++ b/src/backend/utils/adif-parser.js @@ -26,10 +26,12 @@ export function parseADIF(adifData) { } const qso = {}; - const regex = /<([A-Z0-9_]+):(\d+)(?::[A-Z]+)?>/gi; - let match; - while ((match = regex.exec(record)) !== null) { + // Use matchAll for cleaner parsing (creates new iterator for each record) + const matches = record.matchAll(/<([A-Z0-9_]+):(\d+)(?::[A-Z]+)?>/gi); + let currentPos = 0; + + for (const match of matches) { const [fullMatch, fieldName, lengthStr] = match; const length = parseInt(lengthStr, 10); const valueStart = match.index + fullMatch.length; @@ -39,8 +41,7 @@ export function parseADIF(adifData) { qso[fieldName.toLowerCase()] = value.trim(); - // Update regex position to continue after the value - regex.lastIndex = valueStart + length; + currentPos = valueStart + length; } // Only add if we have at least a callsign