parseScanData(scanOutput) {
        const networks = [];

        scanOutput.split(/^BSS /m).forEach(station => {
            if (station === "") {
                return;
            }

            const mappedStation = {
                details: {}
            };

            station.split("\n").some(line => {
                //abort if we have everything to avoid useless regex evaluation
                if (
                    mappedStation.bssid !== undefined &&
                    mappedStation.details.signal !== undefined &&
                    mappedStation.details.ssid !== undefined
                ) {
                    return true;
                }
                const trimmedLine = line.trim();


                let match = trimmedLine.match(BSSID_REGEX);

                if (match) {
                    mappedStation.bssid = match.groups.bssid;

                    return;
                }

                match = trimmedLine.match(SIGNAL_REGEX);

                if (match) {
                    mappedStation.details.signal = parseFloat(match.groups.signal);

                    return;
                }


                match = trimmedLine.match(SSID_REGEX);

                if (match) {
                    mappedStation.details.ssid = match.groups.ssid;

                    return;
                }
            });

            /*
                This is limited to prevent an attacker spamming fake beacons from
                filling up our cache with nonsense, potentially exhausting memory
             */
            if (mappedStation.bssid !== undefined && networks.length < MAX_NETWORK_COUNT) {
                networks.push(new ValetudoWifiNetwork({
                    bssid: mappedStation.bssid,
                    details: mappedStation.details
                }));
            }
        });

        return networks;
    }
@private
@param {string} scanOutput
@returns {Array<ValetudoWifiNetwork>}