JSFiddle - React, Tailwind, and code Playground

by joplomacedo

JavaScript

function isCharALetter(char) {
    return char !== ' ' && ( char.toLowerCase() != char.toUpperCase() )
}

function isCharASingleNumberStr(char) {
    return ['1','2','3','4','5','6','7','8','9','0'].includes(char);
} 

function isCharSpaceOrPunctuationMark( char ) {
    return !isCharASingleNumberStr(char) && !isCharALetter(char)
}

function isLetterInUpperCase( letter ) {
    if ( !isCharALetter(letter) ) {
        console.error('isLetterInUpperCase() was called on a non letter character.');
        return;
    }

    return letter === letter.toUpperCase();
}

function tickerExtractionAlgoDefault( msgText ) {

    // is letter && in uppercase

    const possibleTickerConfusionWords = ['I', 'DD', 'LOL', 'ROFL', 'LMAO', 'OK', 'FYI'];

    const tickers = [];

    let tickerInBuilding = null;
    let waitForNextSpaceOrPunctuationMark = false;

    for( let i = 0; i < msgText.length; i++) {
        let char = msgText[i];

        if ( waitForNextSpaceOrPunctuationMark ) {
            if ( isCharSpaceOrPunctuationMark(char) ) {
                waitForNextSpaceOrPunctuationMark = false;
            }  

            continue;
        }

        if ( tickerInBuilding !== null ) {

            if ( isCharSpaceOrPunctuationMark(char) ) {
                tickers.push(tickerInBuilding);
                tickerInBuilding = null;

            } else if ( isCharALetter(char) && isLetterInUpperCase(char) ) {
                tickerInBuilding += char;

            } else {
                //doesnt look like a ticker. ignore and wait for next space to try again
                waitForNextSpaceOrPunctuationMark = true;
                tickerInBuilding = null;
            }

            continue;
        }


        if ( isCharALetter(char) && isLetterInUpperCase(char) ) {
            tickerInBuilding = char;
        }
    }

    if ( tickerInBuilding ) {
        tickers.push(tickerInBuilding);
    }

    //remove duplicates
    let filteredTickers = [...new Set(tickers)];
   ...