const regex = /(?<callsign>\w+?)>APRS,.+?,
(?<receiver>\w+):\/
(?<time>\d{6})h
(?<latitude>\d{4}\.\d{2}[NS]).
(?<longitude>\d{5}\.\d{2}[EW]).
(?:(?<heading>\d{3})\/(?<ground_speed>\d{3}))?.*?
\/A=(?<altitude>\d{6})\s
(?:!W((?<latitude_enhancement>\d)(?<longitude_enhancement>\d))!)?
(?:v(?<version>\d+\.\d+\.\d+)(?:\.(?<platform>.+?))?\s)?
CPU:(?<cpu_load>[\d.]+)\s
RAM:(?<ram_free>[\d.]+)\/(?<ram_total>[\d.]+)MB\s
NTP:(?<ntp_offset>[\d.]+)ms\/(?<ntp_correction>[+-][\d.]+)ppm\s?
(?:(?<cpu_temperature>[+-][\d.]+)C\s*)?
(?:RF:
(?:
(?<manual_correction>[+-][\d]+)
(?<automatic_correction>[+-][\d.]+)ppm\/
)?
(?<signal>[+-][\d.]+)dB
)?/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<callsign>\\w+?)>APRS,.+?,
(?<receiver>\\w+):\\\/
(?<time>\\d{6})h
(?<latitude>\\d{4}\\.\\d{2}[NS]).
(?<longitude>\\d{5}\\.\\d{2}[EW]).
(?:(?<heading>\\d{3})\\\/(?<ground_speed>\\d{3}))?.*?
\\\/A=(?<altitude>\\d{6})\\s
(?:!W((?<latitude_enhancement>\\d)(?<longitude_enhancement>\\d))!)?
(?:v(?<version>\\d+\\.\\d+\\.\\d+)(?:\\.(?<platform>.+?))?\\s)?
CPU:(?<cpu_load>[\\d.]+)\\s
RAM:(?<ram_free>[\\d.]+)\\\/(?<ram_total>[\\d.]+)MB\\s
NTP:(?<ntp_offset>[\\d.]+)ms\\\/(?<ntp_correction>[+-][\\d.]+)ppm\\s?
(?:(?<cpu_temperature>[+-][\\d.]+)C\\s*)?
(?:RF:
(?:
(?<manual_correction>[+-][\\d]+)
(?<automatic_correction>[+-][\\d.]+)ppm\\\/
)?
(?<signal>[+-][\\d.]+)dB
)?', 'g')
const str = `LKHS>APRS,TCPIP*,qAC,GLIDERN2:/211635h4902.45NI01429.51E&000/000/A=001689 v0.2.4.ARM CPU:0.2 RAM:777.7/972.2MB NTP:3.1ms/-3.8ppm +33.6C RF:+62-0.8ppm/+33.66dB
Moosburg>APRS,TCPIP*,qAC,GLIDERN1:/232205h4827.52NI01155.89E&000/000/A=001397 v0.2.4.ARM CPU:0.8 RAM:788.7/1017.6MB NTP:16000.0ms/-73.4ppm RF:+8.00dB`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions