Skip to main content
deleted 88 characters in body; edited title
Source Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238

JavaScript: Parsing a string with regex to build JSON

SoI'm pretty sure the code is of mild quality but not entirely sure as I'm not much of a JavaScript programmer. Everything works as expected. A quick rundown of the code. It simply parses a string and builds some game data for saving into a database. One thing I'm not sure of is how I should handle data that doesn't conform to how it's expected.

    // var diplo = `!report Game Type: Diplo Early Bird
    // 1: <@12321321421412421>
    // 2: <@23423052352342334>
    // 3: <@45346346345343453>
    // 4: <@23423423423523523>`

    var diplo = `!report Game Type: Team Modded
    Team: 1
        <@23452342359234534>
        <@34642342359232352>
    Team: 2
        <@34534342359234879>
        <@58493457202345054>`


    var report = {};


    function gameType(game) {
        let data = {};
        let game_types = [{id: 1, name: 'Diplo'}, {id: 2, name: 'Always War'}, {id: 3, name: 'FFA'}
            , {id: 4, name: 'No Diplo'}, {id: 5, name: 'Team'}, {id: 6, name: 'Duel'}, {id: 7, name: 'No War'}];
        let o = {}
        let reType = /!report Game Type:[\s+]?(\d|\w+)\s?(\w+\s?(\w+)?)?\n/gi
        let match = reType.exec(game)
        if(match[1]){
            for (var j = 0; j < game_types.length; j++) {
                if ((game_types[j].name).toLowerCase() === (match[1]).toLowerCase()) {
                    data.type = game_types[j].id;
                    break;
                }
            }
        }
        if(match[2]){
            data.moddifier = match[2]
        }
        diplo = game.slice(reType.lastIndex);
        return (data)
    }

    function getPlayers(game) {
        let players = [];
        rePlayer = /(\d+):\s?<@(\d+)>[\s\S]?(\w+\s?\w+)?/gi;
            do {
                let o = {};
                player = rePlayer.exec(game);
                if (player) {
                    o.position = player[1]
                    o.discord_id = player[2]
                    players.push(o);
                }
            } while (player);
            return players;
    }

    function getTeamPlayers(game) {
        let players = [];
        reTeam = /Team:\s(\d)[\s\S](\s+?<@(\d+)>)+/gi;
        rePlayer = /\s+?<@(\d+)>/gi;
        let i = 1;
        do {
            team = reTeam.exec(game);
            if(team){
                do {
                    player = rePlayer.exec(team[0]);
                    if(player){         
                        let o = {}; 
                        o.team_id = i;
                        o.position = team[1];
                        o.discord_id = player[1];
                        players.push(o);
                    }
                }while(player)
            }
            i++;
        }while(team)
        return players;
    }

    function main() {

        console.log("Reading game data...")
        try {
            report = gameType(diplo)
            if(report.type === 5){
                report.players = getTeamPlayers(diplo);
            }else{
                report.players = getPlayers(diplo);
            }
            console.log(report)
        } catch (err) {
            return 'Error Processing Report!';
        }        
    }

    main();

JavaScript: Parsing a string with regex to build JSON

So pretty sure the code is of mild quality but not entirely sure as I'm not much of a JavaScript programmer. Everything works as expected. A quick rundown of the code. It simply parses a string and builds some game data for saving into a database. One thing I'm not sure of is how I should handle data that doesn't conform to how it's expected.

    // var diplo = `!report Game Type: Diplo Early Bird
    // 1: <@12321321421412421>
    // 2: <@23423052352342334>
    // 3: <@45346346345343453>
    // 4: <@23423423423523523>`

    var diplo = `!report Game Type: Team Modded
    Team: 1
        <@23452342359234534>
        <@34642342359232352>
    Team: 2
        <@34534342359234879>
        <@58493457202345054>`


    var report = {};


    function gameType(game) {
        let data = {};
        let game_types = [{id: 1, name: 'Diplo'}, {id: 2, name: 'Always War'}, {id: 3, name: 'FFA'}
            , {id: 4, name: 'No Diplo'}, {id: 5, name: 'Team'}, {id: 6, name: 'Duel'}, {id: 7, name: 'No War'}];
        let o = {}
        let reType = /!report Game Type:[\s+]?(\d|\w+)\s?(\w+\s?(\w+)?)?\n/gi
        let match = reType.exec(game)
        if(match[1]){
            for (var j = 0; j < game_types.length; j++) {
                if ((game_types[j].name).toLowerCase() === (match[1]).toLowerCase()) {
                    data.type = game_types[j].id;
                    break;
                }
            }
        }
        if(match[2]){
            data.moddifier = match[2]
        }
        diplo = game.slice(reType.lastIndex);
        return (data)
    }

    function getPlayers(game) {
        let players = [];
        rePlayer = /(\d+):\s?<@(\d+)>[\s\S]?(\w+\s?\w+)?/gi;
            do {
                let o = {};
                player = rePlayer.exec(game);
                if (player) {
                    o.position = player[1]
                    o.discord_id = player[2]
                    players.push(o);
                }
            } while (player);
            return players;
    }

    function getTeamPlayers(game) {
        let players = [];
        reTeam = /Team:\s(\d)[\s\S](\s+?<@(\d+)>)+/gi;
        rePlayer = /\s+?<@(\d+)>/gi;
        let i = 1;
        do {
            team = reTeam.exec(game);
            if(team){
                do {
                    player = rePlayer.exec(team[0]);
                    if(player){         
                        let o = {}; 
                        o.team_id = i;
                        o.position = team[1];
                        o.discord_id = player[1];
                        players.push(o);
                    }
                }while(player)
            }
            i++;
        }while(team)
        return players;
    }

    function main() {

        console.log("Reading game data...")
        try {
            report = gameType(diplo)
            if(report.type === 5){
                report.players = getTeamPlayers(diplo);
            }else{
                report.players = getPlayers(diplo);
            }
            console.log(report)
        } catch (err) {
            return 'Error Processing Report!';
        }        
    }

    main();

Parsing a string with regex to build JSON

I'm pretty sure the code is of mild quality but not entirely sure as I'm not much of a JavaScript programmer. Everything works as expected. A quick rundown of the code. It simply parses a string and builds some game data for saving into a database. One thing I'm not sure of is how I should handle data that doesn't conform to how it's expected.

// var diplo = `!report Game Type: Diplo Early Bird
// 1: <@12321321421412421>
// 2: <@23423052352342334>
// 3: <@45346346345343453>
// 4: <@23423423423523523>`

var diplo = `!report Game Type: Team Modded
Team: 1
    <@23452342359234534>
    <@34642342359232352>
Team: 2
    <@34534342359234879>
    <@58493457202345054>`


var report = {};


function gameType(game) {
    let data = {};
    let game_types = [{id: 1, name: 'Diplo'}, {id: 2, name: 'Always War'}, {id: 3, name: 'FFA'}
        , {id: 4, name: 'No Diplo'}, {id: 5, name: 'Team'}, {id: 6, name: 'Duel'}, {id: 7, name: 'No War'}];
    let o = {}
    let reType = /!report Game Type:[\s+]?(\d|\w+)\s?(\w+\s?(\w+)?)?\n/gi
    let match = reType.exec(game)
    if(match[1]){
        for (var j = 0; j < game_types.length; j++) {
            if ((game_types[j].name).toLowerCase() === (match[1]).toLowerCase()) {
                data.type = game_types[j].id;
                break;
            }
        }
    }
    if(match[2]){
        data.moddifier = match[2]
    }
    diplo = game.slice(reType.lastIndex);
    return (data)
}

function getPlayers(game) {
    let players = [];
    rePlayer = /(\d+):\s?<@(\d+)>[\s\S]?(\w+\s?\w+)?/gi;
        do {
            let o = {};
            player = rePlayer.exec(game);
            if (player) {
                o.position = player[1]
                o.discord_id = player[2]
                players.push(o);
            }
        } while (player);
        return players;
}

function getTeamPlayers(game) {
    let players = [];
    reTeam = /Team:\s(\d)[\s\S](\s+?<@(\d+)>)+/gi;
    rePlayer = /\s+?<@(\d+)>/gi;
    let i = 1;
    do {
        team = reTeam.exec(game);
        if(team){
            do {
                player = rePlayer.exec(team[0]);
                if(player){         
                    let o = {}; 
                    o.team_id = i;
                    o.position = team[1];
                    o.discord_id = player[1];
                    players.push(o);
                }
            }while(player)
        }
        i++;
    }while(team)
    return players;
}

function main() {

    console.log("Reading game data...")
    try {
        report = gameType(diplo)
        if(report.type === 5){
            report.players = getTeamPlayers(diplo);
        }else{
            report.players = getPlayers(diplo);
        }
        console.log(report)
    } catch (err) {
        return 'Error Processing Report!';
    }        
}

main();
edited title
Link

Basic JavaScript would just like: Parsing a quick input on any possible changesstring with regex to build JSON

Source Link

Basic JavaScript would just like a quick input on any possible changes

So pretty sure the code is of mild quality but not entirely sure as I'm not much of a JavaScript programmer. Everything works as expected. A quick rundown of the code. It simply parses a string and builds some game data for saving into a database. One thing I'm not sure of is how I should handle data that doesn't conform to how it's expected.

    // var diplo = `!report Game Type: Diplo Early Bird
    // 1: <@12321321421412421>
    // 2: <@23423052352342334>
    // 3: <@45346346345343453>
    // 4: <@23423423423523523>`

    var diplo = `!report Game Type: Team Modded
    Team: 1
        <@23452342359234534>
        <@34642342359232352>
    Team: 2
        <@34534342359234879>
        <@58493457202345054>`


    var report = {};


    function gameType(game) {
        let data = {};
        let game_types = [{id: 1, name: 'Diplo'}, {id: 2, name: 'Always War'}, {id: 3, name: 'FFA'}
            , {id: 4, name: 'No Diplo'}, {id: 5, name: 'Team'}, {id: 6, name: 'Duel'}, {id: 7, name: 'No War'}];
        let o = {}
        let reType = /!report Game Type:[\s+]?(\d|\w+)\s?(\w+\s?(\w+)?)?\n/gi
        let match = reType.exec(game)
        if(match[1]){
            for (var j = 0; j < game_types.length; j++) {
                if ((game_types[j].name).toLowerCase() === (match[1]).toLowerCase()) {
                    data.type = game_types[j].id;
                    break;
                }
            }
        }
        if(match[2]){
            data.moddifier = match[2]
        }
        diplo = game.slice(reType.lastIndex);
        return (data)
    }

    function getPlayers(game) {
        let players = [];
        rePlayer = /(\d+):\s?<@(\d+)>[\s\S]?(\w+\s?\w+)?/gi;
            do {
                let o = {};
                player = rePlayer.exec(game);
                if (player) {
                    o.position = player[1]
                    o.discord_id = player[2]
                    players.push(o);
                }
            } while (player);
            return players;
    }

    function getTeamPlayers(game) {
        let players = [];
        reTeam = /Team:\s(\d)[\s\S](\s+?<@(\d+)>)+/gi;
        rePlayer = /\s+?<@(\d+)>/gi;
        let i = 1;
        do {
            team = reTeam.exec(game);
            if(team){
                do {
                    player = rePlayer.exec(team[0]);
                    if(player){         
                        let o = {}; 
                        o.team_id = i;
                        o.position = team[1];
                        o.discord_id = player[1];
                        players.push(o);
                    }
                }while(player)
            }
            i++;
        }while(team)
        return players;
    }

    function main() {

        console.log("Reading game data...")
        try {
            report = gameType(diplo)
            if(report.type === 5){
                report.players = getTeamPlayers(diplo);
            }else{
                report.players = getPlayers(diplo);
            }
            console.log(report)
        } catch (err) {
            return 'Error Processing Report!';
        }        
    }

    main();