特定の文字列に一致し、その各文字を記号に置き換える正規表現が必要です。
だから..."Cheese"
に置き換えられます"******"
が、"Pie"
に置き換えられます"***"
たとえば、次のようになります。
"my pie is tasty and so is cake".replace(new RegExp(/(pizza|cake|pie|test|horseshoe)/gi), "'*' x length($1)")
(もちろん代用はありません)
特定の文字列に一致し、その各文字を記号に置き換える正規表現が必要です。
だから..."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, '*'); });
免責事項:これらのフィルターは機能しません。. そうは言っても、コールバック関数を次のように使用することをお勧めしますreplace
。
"my pie is tasty and so is cake".replace(/(pizza|cake|pie|test|horseshoe)/gi, function (match) {
return match.replace(/./g, '*');
});
前述の@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, '*');
});