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

标签 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);

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

  • Omg @%damn 太聪明了,@%damn!
  • 我的天啊该死的&&太聪明了,该死的&&!

最佳答案

替换字符串中有几个序列被展开:

  • $& , 整场比赛
  • $` , 匹配前的字符串
  • $' , 匹配后的字符串
  • $<i>d</i> (d 是任何数字),该索引处的捕获组
  • $$ , 单个 $

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

replaceString += '$';

replaceString += '$$';

一切都应该正常工作。

关于Javascript 正则表达式替换有时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34624335/

相关文章:

javascript - 如何为 node/mongo 创建一个正则表达式来查找不包含正则表达式的数据

JavaScript RegEx 取代 HTML 编码

Java 正则表达式 : Replace part of source string

javascript - Highstock 中的尖峰未正确显示

javascript - 为什么我的图片没有显示

javascript - 在移动网络浏览器上自动显示软键盘

javascript - 显示 package.json 中的依赖项

javascript - 在动态添加的内容上加载 jquery 选项卡

php - Mysql正则表达式使用多个规则来匹配字符串

regex - 如何在 Rust 中使用带反向引用的正则表达式进行正则表达式字符串替换?