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...