diff --git a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js
index 9c97762..eb9b098 100644
--- a/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js
+++ b/src/trx-client/trx-frontend/trx-frontend-http/assets/web/plugins/ft8.js
@@ -29,17 +29,27 @@ function addFt8Message(msg) {
}
function renderFt8Message(message) {
- const gridRegex = /(^|\\s)([A-R]{2}\\d{2}(?:[A-X]{2})?)(?=\\s|$)/gi;
- return message.replace(gridRegex, (match, lead, grid) => {
- const safeGrid = grid.toUpperCase();
- return `${lead}[${safeGrid}]`;
- });
+ const parts = message.split(/(\\s+)/);
+ return parts.map((part) => {
+ const token = part.trim();
+ if (!token) return part;
+ const grid = token.toUpperCase();
+ if (/^[A-R]{2}\\d{2}(?:[A-X]{2})?$/.test(grid)) {
+ return part.replace(token, `[${grid}]`);
+ }
+ return part;
+ }).join("");
}
function extractFirstGrid(message) {
- const gridRegex = /(^|\\s)([A-R]{2}\\d{2}(?:[A-X]{2})?)(?=\\s|$)/i;
- const match = message.match(gridRegex);
- return match ? match[2].toUpperCase() : null;
+ const parts = message.split(/\\s+/);
+ for (const part of parts) {
+ const grid = part.toUpperCase();
+ if (/^[A-R]{2}\\d{2}(?:[A-X]{2})?$/.test(grid)) {
+ return grid;
+ }
+ }
+ return null;
}
document.getElementById("ft8-decode-toggle-btn").addEventListener("click", async () => {