我正在使用正则表达式搜索所有相同的单词并替换相同的单词。但是,被替换的单词会不时更改为原始单词。我不确定为什么。
这是代码。
function Censor(word, string){
var newString = '';
var replaceString = '';
var rand = Math.floor(Math.random() * 10) + 1;
for(var x = 0 ; x < word.length ; x++){
switch (rand) {
case 1:
replaceString += '!';
break;
case 2:
replaceString += '@';
break;
case 3:
replaceString += '#';
break;
case 4:
replaceString += '$';
break;
case 5:
replaceString += '%';
break;
case 6:
replaceString += '^';
break;
case 7:
replaceString += '&';
break;
case 8:
replaceString += '*';
break;
case 9:
replaceString += '(';
break;
case 10:
replaceString += ')';
break;
}
var rand = Math.floor(Math.random() * 10) + 1;
}
newString = string.replace(new RegExp(word,'g'), replaceString);
return newString;
}
var string = Censor('damn', 'Omg damn so smart, damn !');
console.log(string);
&#13;
以下是一些意想不到的结果。
答案 0 :(得分:4)
替换字符串中有一些扩展的序列:
$&
,整场比赛$`
,匹配前的字符串$'
,匹配后的字符串$d
( d 是任意数字),该索引处的捕获组$$
,一个$
您的随机生成器正在生成$&
(可能还有$$
)。只需改变
replaceString += '$';
到
replaceString += '$$';
并且事情应该正常。