Using either a for or while loop, but without using Regex, I have to capitalise the first word in a sentence, in a string. Sentences are seperated by dots.
Currently I have the following
<p id="tekst">This is an. Example text. To showcase. What i want</p>
function highlight()
{
var text = document.getElementById("tekst").innerHTML;
//split the above string into an array of strings
//whenever a blank space is encountered
let arr = text.split(" ");
//loop through each element of the array and capitalize the first letter.
for (var i = 0; i < arr.length; i ) {
arr[i] = arr[i].charAt(0).toUpperCase() arr[i].slice(1);
}
//Join all the elements of the array back into a string
//using a blankspace as a separator
const str2 = arr.join(" ");
console.log(str2);
}
What this currently does, is capitalise the first letter in a word. So the text example would be
This Is An. Example Text. To Showcase. What I Want
The desired result is
THIS is an. EXAMPLE text. TO showcase. WHAT i want
CodePudding user response:
I hope the commented code below is helpful:
function highlight() {
var text = document.getElementById("tekst").innerHTML;
let arr = text.split(". ");
let newSentence = ''
//loop through each element of the array and capitalize the first letter.
for (var i = 0; i < arr.length; i ) {
//splitting words
const words = arr[i].split(' ')
//getting the first word and capitalise it
words[0] = words[0].toUpperCase()
//removing the first word from the array and adding the rest of the words to newSentence and adding '. ' to the end of sentence
newSentence = words.join(' ') '. '
}
//trim the sentence to remove any space in the end
newSentence = newSentence.trim()
console.log(newSentence);
}
CodePudding user response:
You have to split on .
first than on
(space) this way you get a array than only loop through
function highlight() {
var text = document.getElementById("tekst").innerHTML;
//split the above string into an array of strings
//whenever a blank space is encountered along with full stop('.')
let arr = text.split(". ");
let arr2;
let fullSentence = '';
//loop through each element of the array and capitalize the first letter.
for (var i = 0; i < arr.length; i ) {
arr2 = arr[i].split(" ");
arr2[0] = arr2[0].toUpperCase();
//get all values from array2 and than join them with a space and end them with '.' . As this is looping so value will be saved in fullSentence and with ` ` sign each subsequent value will be joined with previous one
fullSentence = arr2.join(' ') '. '
}
console.log(fullSentence);
}
highlight();// for automatic run of function
<p id="tekst">This is an. Example text. To showcase. What i want</p>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
For loop is always a pain for me so taken help from @Elson Ramos
CodePudding user response:
How about something like this ?
function highlight() {
var text = "This is an. Example text. To showcase. What i want";
//split the above string into an array of strings
//whenever a blank space is encountered
let arr = text.split(".");
//loop through each element of the array and capitalize the first letter.
arr.forEach((string, index) => {
let sep = string.trim().split(" ");
sep[0] = sep[0].toUpperCase()
arr[index] = sep.join(" ");
});
//Join all the elements of the array back into a string
//using a blankspace as a separator
const str2 = arr.join(". ");
console.log(str2);
}
CodePudding user response:
Hopefully something like this helps!
function formatSentence(sentence) {
const words = sentence.split(" ");
const firstWord = words.shift().toUpperCase();
return [firstWord, ...words.map(w => w.toLowerCase())].join(" ");
}
function formatParagraph(str) {
const sentences = str.split(". ");
const processed = sentences.map(formatSentence);
return processed.join(". ");
}
console.log(
formatParagraph("This Is An. Example Text. To Showcase. What I Want")
);
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>