Skip to content
Advertisement

javascript check if string contains words in array and replace them

I’m having trouble trying to check a string for words from an array and if it includes the word replace them.

var blocked = [
  "inappropriate word one",
  "inappropriate word two",
];

var message = "the message has an inappropriate word one";

if (blocked.some(string => message.includes(string))) {
  message = message.replace(string, "blocked")
}

Advertisement

Answer

In the body of the if the variable string is not available anymore because it’s only valid in the callback of some. So just loop over the blocked words and do the replacement.

blocked.forEach(string => {
  if (message.includes(string)) message = message.replace(string, "blocked");
})

In principle the check isn’t necessary. If the search value is not contained in the string, nothing will be replaced, so you can just do the following:

blocked.forEach(string => {
  message = message.replace(string, "blocked");
})

But be aware that String::replace(search, replacement) only replaces the first occurence of search if it is a string. So if your “badword” occurs more than once, only the first occurence will be replaced. So it might be better to define your blocked words as regex, because this way you can replace multiple occurrences.

var replacements = [
  /badwordone/gi, 
  /badwordtwo/gi
]

replacements.forEach(r => { 
  message = message.replace(r, "blocked");
})
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement