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)];
...