javascript检查字符串是否包含数组中的单词并替换它们



我遇到麻烦,试图检查字符串从数组中的单词,如果它包含单词替换它们。

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")
}

if的主体中,变量string不再可用,因为它仅在some的回调中有效。因此,只需循环blocked单词并执行替换。

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

原则上检查是不必要的。如果字符串中不包含搜索值,则不会替换任何内容,因此您可以执行以下操作:

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

但是要注意,String::replace(search, replacement)只替换search第一个出现,如果它是一个字符串。所以如果你的"坏词"出现多次,则只会替换第一次出现的。因此,最好将阻塞的单词定义为regex,因为这样可以替换多次出现的单词。

var replacements = [
/badwordone/gi, 
/badwordtwo/gi
]
replacements.forEach(r => { 
message = message.replace(r, "blocked");
})

您正在使用message.replace(string),但是string没有在该some()方法的范围之外定义。它只在some()方法内部可用,在外部不可用。因此你的代码不能工作。

相关内容

  • 没有找到相关文章

最新更新