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 removeDuplicates(arr) {
  return [...new Set(arr)];
}

function removeExtraSpacesAndLineBreaks(text) {
	return text.replace(/\n/g, ' ').replace(/\s\s+/g, ' ').trim();
}
console.log('ss')

function extractUnprefixedTickers(text) {

  const strippedText = removeExtraSpacesAndLineBreaks(text);

  // is letter && in uppercase
  const prefixesToIgnore = ['@', '#'];
  const possibleTickerConfusionWords = ['LOL', 'ROFL', 'LMAO', 'OK', 'FYI', 'HOD', 'LOD', 'I', 'BRO', 'GM', 'SS'];

  const tickers = [];

  let tickerInBuilding = null;
  let tryBuilding = true;

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


    if (!tryBuilding) {
      
      if (isCharSpaceOrPunctuationMark(char) && !(prefixesToIgnore.includes(char))) {
        tryBuilding = true;
      }

      continue;
    }


    if (tickerInBuilding === null) {
    
      if (isCharALetter(char) && isLetterInUpperCase(char)) {
        tickerInBuilding = char;
      } else {
        tryBuilding = isCharSpaceOrPunctuationMark(char) && !(prefixesToIgnore.includes(char));
      }

      continue;
    }


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

    } else {

      if (isCharSpaceOrPunctuationMark(char)) {
        if (tickerInBuilding.length < 6 && !possibleTickerConfusionWords.includes(tickerInBuilding)) {
          tickers.push(tickerInBuilding);
        }
      }

      tryBuilding...