Javascript正则表达式替换有时不起作用

时间:2016-01-06 01:44:08

标签: javascript regex

我正在使用正则表达式搜索所有相同的单词并替换相同的单词。但是,被替换的单词会不时更改为原始单词。我不确定为什么。

这是代码。



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;
&#13;
&#13;

以下是一些意想不到的结果。

  • Omg @%该死的聪明,@%该死的!
  • Omg该死的&amp;&amp;太聪明了,该死的&amp;&amp; !

1 个答案:

答案 0 :(得分:4)

替换字符串中有一些扩展的序列:

  • $&,整场比赛
  • $`,匹配前的字符串
  • $',匹配后的字符串
  • $d d 是任意数字),该索引处的捕获组
  • $$,一个$

您的随机生成器正在生成$&(可能还有$$)。只需改变

replaceString += '$';

replaceString += '$$';

并且事情应该正常。