我正在编写一个人们使用的文字过滤器,就像人们一样,他们想要破坏过滤器。为了我的目的,我想过滤掉“你好”这个词,但我也想过滤掉“h e l l o”或“h.e.l.l.o”。
我试过用词边界来捣乱,但没有运气。
// works
message = message.replace(/\bhello\b/gi, "hello");
// doesn't
message = message.replace(/\bh\b\be\b\bl\b\bl\b\bo\b/gi, "hello");
答案 0 :(得分:2)
您正在寻找的正则表达式可能是/\bh\W?e\W?l\W?l\W?o\b/
。你需要一个匹配空间的原子。 \ W是匹配非单词字符的原子(与字母数字相对)。 ?是一个量词,允许前面的原子匹配0或1次。
答案 1 :(得分:1)
你可以使用这样的东西
h[\W]*e[\W]*l[\W]*l[\W]*o
但是,为了写很多字符串,并且更难阅读,这是痛苦的。您可以构建一个基本字符串并使用正则表达式使javascript编写自己的正则表达式字符串
// Pipe delimited list of words, surrounded by parentheses
var rwords = '(howdy|hello|organic)';
// Variable for easy manipulation, sets disallowed characters.
var anti = "[^a-z]*";
// Replace each character with the same followed by the character class contained in the 'anti' variable.
rwords = rwords.replace(/([a-z])/igm,'$1' + anti);
// Surround each side in word boundary markers
rwords = '\\b' + rwords + '\\b';
// Output the regex string as a sample, but you can create a regex object
console.log(rwords);
您可以使用它来创建正则表达式对象,并将其用于匹配
您可以编辑变量anti来保存好的字符。您可能想要允许说出数字,然后将其更改为“[^ a-z0-9]”