我需要一個匹配某個字符串的正則表達式,並用符號替換它的每個字母。Swear Filter正則表達式
所以... "Cheese"
將被"******"
被替換,但"Pie"
將由"***"
因此,例如更換:
"my pie is tasty and so is cake".replace(new RegExp(/(pizza|cake|pie|test|horseshoe)/gi), "'*' x length($1)")
(顯然,替代不存在)
我需要一個匹配某個字符串的正則表達式,並用符號替換它的每個字母。Swear Filter正則表達式
所以... "Cheese"
將被"******"
被替換,但"Pie"
將由"***"
因此,例如更換:
"my pie is tasty and so is cake".replace(new RegExp(/(pizza|cake|pie|test|horseshoe)/gi), "'*' x length($1)")
(顯然,替代不存在)
個人我認爲這是一個非常糟糕的主意,因爲:
但是解決你的問題,你可以通過一個函數來代替:
var regex = /(pizza|cake|pie|test|horseshoe)/gi;
var s = "my pie is tasty and so is cake";
s = s.replace(regex, function(match) { return match.replace(/./g, '*'); });
還要注意Scunthrope問題的警告。 –
@JanDvorak:注意。查看更新。 –
免責聲明:These filters don't work.。話雖這麼說,你可能需要使用回調函數與replace
:
"my pie is tasty and so is cake".replace(/(pizza|cake|pie|test|horseshoe)/gi, function (match) {
return match.replace(/./g, '*');
});
爲了防止上述classic issue通過@ThiefMaster您可以考慮添加文字邊界的格局。但是請記住,您仍然需要處理這些單詞的複數形式和拼寫錯誤。
var str = 'pie and cake are tasty but not spies or protests';
str = str.replace(/\b(pizza|cake|pie|test|horseshoe)\b/gi, function (match) {
return match.replace(/\w/g, '*');
});
請閱讀http://en.wikipedia.org/wiki/Clbuttic和http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-在添加這樣的過濾器之前,需要intercoursing-bad-idea.html。 – ThiefMaster
lol @「buttbuttinate」 – jbabey
另請參閱[本堆棧溢出答案](http://stackoverflow.com/a/6099598/58792)最徹底的解釋爲什麼這是一個死胎的想法。如果你過濾* pie *,人們會使用*рie*或*pіe*,或者* pi * *,* *或*,或者其他幾千個其他技巧中的任何一個。 (你沒有看到這兩者之間的區別嗎?準確地說!但是你的正則表達式會。) –