JSFiddle - React, Tailwind, and code Playground

by joplomacedo

JavaScript

const { removeDuplicates } = require("../../utils");

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 extractUnprefixedTickers( text ) {

    // is letter && in uppercase

    const possibleTickerConfusionWords = ['LOL', 'ROFL', 'LMAO', 'OK', 'FYI', 'HOD', 'LOD', 'I', 'BRO', 'GM', 'SS'];

    const tickers = [];

    let tickerInBuilding = null;
    let waitForNextSpaceOrPunctuationMark = false;

    for( let i = 0; i < text.length; i++) {
        let char = text[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...