Javascript+;忽略单词中的空格和其他字符的regex坏字过滤器

Javascript+;忽略单词中的空格和其他字符的regex坏字过滤器,javascript,regex,node.js,Javascript,Regex,Node.js,我原以为这很简单,但在将一些PHP正则表达式代码转换为javascript时遇到了问题 以下是我的JS代码: for(var i=0; i < badwords.length; i++) { var badword = badwords[i].slice(0, -2); var regex = "/("; for(var j=0; j < badword.length; j++) { regex += "[" + badword[j].toL

我原以为这很简单,但在将一些PHP正则表达式代码转换为javascript时遇到了问题

以下是我的JS代码:

for(var i=0; i < badwords.length; i++) {
    var badword = badwords[i].slice(0, -2);
    var regex = "/(";

    for(var j=0; j < badword.length; j++) {
        regex += "[" + badword[j].toLowerCase() + "|" + badword[j].toUpperCase() + "][/W]*";
    }
    regex += ")/";

    msg = msg.replace(new RegExp(regex, "g"), "");
}
for(变量i=0;i
我没有比赛,也没有替补。同样的代码结构和正则表达式格式在PHP应用程序中工作


非常感谢您的帮助。

如果您的输入是
foo
,则正则表达式应该是
/f[^a-z]*o[^a-z]*o/ig
。您可以使用以下字符串和正则表达式构建此正则表达式:

var message = 'this string should not contain "foo", "b a r", "b.l.a.h" and "b_a_z". Baaz is acceptable.';
var badwords = ["foo", "bar", "blah", "baz"];
for (var i = 0; i < badwords.length; i++) {
    var pat = badwords[i].slice(0, -1).replace(/([a-z])/g, "$1[^a-z]*") + badwords[i].slice(-1);
    var rxp = new RegExp(pat, "ig");
    message = message.replace(rxp, "****");
}
message;
// output:
// this string should not contain "****", "****", "****" and "****". Baaz is acceptable.
var message='此字符串不应包含“foo”、“bar”、“b.l.a.h”和“b_a_z”。巴兹是可以接受的;
var badwords=[“foo”,“bar”,“blah”,“baz”];
for(var i=0;i
使用
RegExp
构造函数时,不需要JavaScript中的
'/'
分隔符。此外,我也不清楚你想要实现什么。你把
“foo”
变成
“/([f | f][/W]*[o | o][/W]*[o | o][/W]*)/”
?使用
[]
,您不需要
|
来指定备选方案(而是匹配文字
|
字符)
[/W]
匹配
/
W
,您是指
\W
(非单词字符)吗?我正在尝试创建诅咒词过滤器。它不起作用,因为在我更改斜杠[\W]后,它现在起作用了。正则表达式对我来说是全新的,我在浏览网页时发现了它。有没有更好的诅咒词正则表达式的建议?如果
foo
是一个坏词,那么
foo
fo,o
foooo
foo
f.o
foobar
?是的,有了诅咒词列表,这就是我的目标,空格或其他字符之间没有关系,单词仍然会匹配。-1表示根本愚蠢的概念。因此,如果你的恶言列表中包含“ass”,那么你会希望“classic”变成“cl****ic”,而“hehaseseenthelight”变成“heh****een thelight”?@Ian:。显然,偏执狂从不学习。该死!(嘿,通过你的过滤器。耶。)是的,我可以想出一个更复杂的坏词过滤器,但是客户为这个过滤器设置规则,而不是我,就是这样。谢谢大家的帮助。