我需要一个匹配某个字符串并用符号替换它的每个字母的正则表达式。
所以..."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, '*');
});
工作示例:http: //jsfiddle.net/mRF9m/
为了防止@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, '*');
});