i am trying to replace the letters i get from the word with underscores but if there is any spaces in that word i do not want to replace it. im not sure how to do it. the current code i am using is this answerArray = [] function randomWord() {
for (let i = 0; i < word.length; i ) {
answerArray[i] = "_"
answer.innerHTML = answerArray.join(" ")
}
}
i've tried to look around in stackoverflow with my question but no one has it. someones suggested this
word.replace(/\w/gi, '_')
but it isnt working as i want.
You can check out the code here https://codepen.io/NoNameYet04/pen/OJxKYeV i have for the test change the word in "programming language" to "test test" so you can test it out
CodePudding user response:
I did a quick example below. With problems like this it's always better to try to break it down into small logical steps.
Go through each character
If it's a space then leave it
If it's not then replace with an _
function randomWord(word) { let ret = ""; // return string for (let i = 0; i < word.length; i ) { // go through each character if(word[i] !== " "){ // if it's not a space then replace it ret = "_"; } else if (word[i] === " "){ // if it's a space then we add to the return string ret = " "; } } return ret; //return or answer.innerHTML = ret;}
Call using: randomWord("hello there");
CodePudding user response:
Check if it's a space using an if statement like this:
if (word[i] !== ' '){
answerArray[i] = '_';
}
else {
answerArray[i] = ' ';
}
CodePudding user response:
You could use replace()
const word = "one two";
const result = word.replace(/\w/g, "_");
console.log(result);
CodePudding user response:
Maybe try this one by split the string to array and replace the word and finally join back.
The output for programming language will be ___________ ________
If you want to trigger the space between each character, use replace(/\w/g, '_ ') instead of replace(/\w/g, '_')
let word = 'programming language'
let answerArray = []
let newword = word.split(' ').forEach(i => {
answerArray.push(i.replace(/\w/g, '_ '))
})
// answer.innerHTML = answerArray.join(" ")
console.log(answerArray.join(" "))
CodePudding user response:
function randomWord() {
for (let i = 0; i < word.length; i ) {
answerArray[i] = word[i] == " " ? " " : "_"; // <==
console.log(answerArray[i]);
answer.innerHTML = answerArray.join(" ")
}
}
Explanation: Is the current character you're iterating a space in the word? If yes we insert a space (in this case an HTML space), if not we just insert an underscore.
Also, don't forget to change the assignment of the variable remainingLetters in your category() function so you're ignoring the space.
function category(type) {
/* ... */
remainingLetters = word.replace(/ /g, "").length;
/* ... */
}
