我正在使用正则表达式搜索所有相同的词并替换相同的词。然而,被替换的词有时会变回原来的词。我不确定为什么。
这是代码。
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);
以下是一些意想不到的结果。
- Omg @%damn 太聪明了,@%damn!
- 我的天啊该死的&&太聪明了,该死的&&!
最佳答案
替换字符串中有几个序列被展开:
-
$&
, 整场比赛 -
$`
, 匹配前的字符串 -
$'
, 匹配后的字符串 -
$<i>d</i>
(d 是任何数字),该索引处的捕获组 -
$$
, 单个$
您的随机生成器正在生成 $&
(可能还有 $$
)。只是改变
replaceString += '$';
到
replaceString += '$$';
一切都应该正常工作。
关于Javascript 正则表达式替换有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624335/