diff --git a/web/js/issues.js b/web/js/issues.js index f8d20da..f48dd6d 100644 --- a/web/js/issues.js +++ b/web/js/issues.js @@ -12,6 +12,7 @@ export function clearIssues() { } let socialRefsByIssueId = new Map(); +const ISSUE_ID_LINE_PATTERN = /^((?:[A-Z]{2,6}|WF500)-\d{4,8})\s*[:\-]?\s*(.*)$/i; const socialRefsReady = loadSocialRefs(); const issueFileDataCache = new Map(); const issueFilePromiseCache = new Map(); @@ -415,7 +416,7 @@ function dedupeIssues(issues, versionKey) { function parseIssueLine(text) { const value = String(text || '').trim(); - const match = value.match(/^([A-Z]{2,6}-\d{4,8})\s*[:\-]?\s*(.*)$/i); + const match = value.match(ISSUE_ID_LINE_PATTERN); if (match) { return { id: match[1].toUpperCase(), diff --git a/web/js/process.js b/web/js/process.js index 1a1826a..a4d708d 100644 --- a/web/js/process.js +++ b/web/js/process.js @@ -8,6 +8,7 @@ document.addEventListener('DOMContentLoaded', () => { let activeDownloadUrl = null; const PROCESS_FORM_STATE_KEY = 'bugmedley.process.formState.v1'; +const ISSUE_ID_PATTERN = /\b((?:[A-Z]{2,6}|WF500)-\d{4,8})\b/i; function loadProducts() { fetch('data/products.json') @@ -120,7 +121,7 @@ function parseIssuesFromHtmlTable(htmlText) { return; } - const issueIdMatch = leftCellText.match(/\b([A-Z]{2,6}-\d{4,8})\b/i); + const issueIdMatch = leftCellText.match(ISSUE_ID_PATTERN); if (!issueIdMatch) { return; } @@ -258,7 +259,7 @@ function parseIssuesFromLinePairs(rawText) { continue; } - const issueIdMatch = lines[i].match(/\b([A-Z]{2,6}-\d{4,8})\b/i); + const issueIdMatch = lines[i].match(ISSUE_ID_PATTERN); if (!issueIdMatch) { continue; }