2

特定の文字列に一致し、その各文字を記号に置き換える正規表現が必要です。

だから..."Cheese"に置き換えられます"******"が、"Pie"に置き換えられます"***"

たとえば、次のようになります。

"my pie is tasty and so is cake".replace(new RegExp(/(pizza|cake|pie|test|horseshoe)/gi), "'*' x length($1)")

(もちろん代用はありません)

4

3 に答える 3

5

個人的には、これは非常に悪い考えだと思います。

  • 有効なユーザーを苛立たせる可能性のある有効なテキストを台無しにします。
  • スペルミスを使用してフィルターを簡単にだますことができるため、悪意のあるユーザーを妨害することはできません。

ただし、問題を解決するために、関数を渡して置き換えることができます。

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, '*'); });
于 2012-12-23T15:42:35.600 に答える
3

免責事項:これらのフィルターは機能しません。. そうは言っても、コールバック関数を次のように使用することをお勧めしますreplace

"my pie is tasty and so is cake".replace(/(pizza|cake|pie|test|horseshoe)/gi, function (match) {
    return match.replace(/./g, '*');
});

作業例: http://jsfiddle.net/mRF9m/

于 2012-12-23T15:44:03.950 に答える
0

前述の@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, '*');
});
于 2012-12-24T20:00:38.603 に答える