Home > Enterprise >  How do i replace letters with underscores but let the spaces stay in javascript
How do i replace letters with underscores but let the spaces stay in javascript

Time:01-24

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] == " " ? "&nbsp;" : "_"; // <==
    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;
  /* ... */
}
  •  Tags:  
  • Related