Edited because i wasn’t clear enough
I have some text from a .txt file, that i want to display on a HTML page. I want to have a linebreak before- and after an uppercase line, but not for standalone words. Like if more than 2 words are uppercase, they should be on a seperate line, but not if its only one word.
const text1 = "I want THIS ON A SEPERATE LINE but not THIS text here"; function convertText(text) { ...check for uppercase line.... document.write(modifiedText) } convertText(text1); /* Wanted result: I want THIS ON A SEPERATE LINE but not THIS text here */
How can I do this?
Advertisement
Answer
You’ll need to split each word up, put them into groups of capitalised and non-capitalised and then iterate through those groups, checking each word to find if there are multiple capitalised words in each group. Something like the following should do the job:
function convertText(text) { const words = text.split(' '); // split the string into an array of word strings let currentLine = ''; // groups of words of the same case const wordGroups = []; let lastWordWasAllCaps = false; // group words by case for (const word of words) { if (word === word.toUpperCase()) { if(!lastWordWasAllCaps) { // word is in block capitals, but the last one wasn't wordGroups.push(currentLine); currentLine = word; } else { currentLine = currentLine.concat(' ', word); } lastWordWasAllCaps = true; } else { if (lastWordWasAllCaps) { // word is not in block capitals, but the last one was wordGroups.push(currentLine); currentLine = word; } else { currentLine = currentLine.concat(' ', word); } lastWordWasAllCaps = false; } } // push the last line wordGroups.push(currentLine); let finalString = ''; let breakNextLine = true; // now look through the groups of words and join any single full capital words to their siblings for (const wordGroup of wordGroups) { // if a group is all caps and has no spaces, join it without a line break if (wordGroup === wordGroup.toUpperCase() && !wordGroup.includes(' ')) { finalString = finalString.concat(' ', wordGroup); // tell the next set to join without a line break breakNextLine = false; } else { if (breakNextLine) { finalString = finalString.concat('n', wordGroup); } else { finalString = finalString.concat(' ', wordGroup); } breakNextLine = true; } } return finalString.slice(2); // remove the added spaces at the start }