Javascript 我怎么能禁止一个词

Javascript 我怎么能禁止一个词,javascript,Javascript,我想用星号替换坏单词***。然而,当坏单词包含在另一个单词中时,就会出现问题,我不想替换它 for(var i = 0; i < forbidden.length; i++) { if(textBoxValue.search(forbidden[i]) > -1) { textBoxValue = textBoxValue.replace(forbidden[i], ''); } } for(变量i=0;i-1){ textBoxValue=text

我想用星号替换坏单词
***
。然而,当坏单词包含在另一个单词中时,就会出现问题,我不想替换它

for(var i = 0; i < forbidden.length; i++) {
    if(textBoxValue.search(forbidden[i]) > -1) {
        textBoxValue = textBoxValue.replace(forbidden[i], '');
    }
}
for(变量i=0;i-1){
textBoxValue=textBoxValue.replace(禁止[i],'');
}
}

例如,如果坏单词是“are”,如果它是在另一个单词中,如“aren't”,我不希望它显示为“***n't”。我只想替换单词本身。

一个选项是使用正则表达式,每边都有单词边界,以确保匹配的单词是独立的:

forbidden.forEach((word) => {
  textBoxValue = textBoxValue.replace(new RegExp('\\b' + word + '\\b', 'g'), '');
});
例如:

let textBoxValue='bigwordfoo foo bar barbaz';
常量禁止=['foo','bar'];
禁止使用。forEach((单词)=>{
textBoxValue=textBoxValue.replace(新的RegExp('\\b'+word+'\\b','g'),'');
});

console.log(textBoxValue)
您可以创建一个动态正则表达式,将所有禁止的单词用
|
分隔,以创建一个动态正则表达式。您可以使用单词边界(
\b
)将其包装为仅完全匹配单词

对于下面列出的禁止字,动态正则表达式最终被禁用

/\b(?:bad|nasty|dreadful)\b/g
replace
的第二个参数获取匹配的单词作为参数。您可以使用来获得与要替换的单词长度相同的重复次数

函数替换坏字(textBoxValue,禁止){
const regex=new RegExp(`\\b(?:${probled.join('|')})\\b`,'g')
返回textBoxValue.replace(regex,m=>“*”。重复(m.length))
}
禁止常数=[“坏的”、“讨厌的”、“可怕的”]
log(replaceBadWords('字符串中有一些讨厌的单词',禁止))

log(replaceBadWords(“坏的被替换为星号,但羽毛球不会被替换”,禁止))
如果您还没有使用库(或者如果您想使用库)

你可以退房

首先,他们已经有一个坏词的清单,所以你不需要去想他们,去想你错过了什么

它们支持以下占位符:

var Filter = require('bad-words');
var customFilter = new Filter({ placeHolder: 'x'});

customFilter.clean('Don't be an ash0le'); //Don't be an xxxxxx
您可以添加或删除自己的坏话,如:

var filter = new Filter(); 

// add to list
filter.addWords('some', 'bad', 'word');

// remove from list
filter.removeWords('hells', 'sadist');

如果您有正确的正则表达式,还可以提供多语言支持

您可以构建一个正则表达式来匹配所有单词
'\\b(?:'+禁止.map(escape).join('.')+')\\b'