【问题标题】:JavaScript Regex Remove Specific Consecutive Duplicate CharactersJavaScript 正则表达式删除特定的连续重复字符
【发布时间】:2016-11-04 15:06:50
【问题描述】:

我正在尝试构建一个正则表达式函数,该函数将删除任何非字母数字字符并删除所有重复字符,例如这:aabcd*def%gGGhhhijkklmnoP\1223 将变成:abcddefgGhijklmnoPR3。我可以轻松删除特殊字符,但我一生都无法弄清楚如何删除重复字符?这是我当前删除特殊字符的代码:

var oldString = aabcd*def%gGGhhhijkklmnoP\122
var filtered = oldStringt.replace(/[^\w\s]/gi, ""); 

如何扩展上述正则表达式以检查重复字符以及由非字母数字字符分隔的重复字符。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    正则表达式是/[^\w\s]|(.)\1/gi

    在这里测试:http://jsfiddle.net/Cte94/

    它使用反向引用来搜索任何字符 (.) 后跟相同的字符 \1

    除非“检查重复字符”是指aaa => a

    那就是/[^\w\s]|(.)(?=\1)/gi

    在这里测试:http://jsfiddle.net/Cte94/1/

    请注意,两个正则表达式都不区分大小写。 A == a,所以Aa 是重复的。不想要的话,把i/gi拿走

    【讨论】:

    • 非常感谢,无论如何我可以确保删除由非字母数字字符分隔的重复项。
    • @jonathanp 使其成为两个正则表达式(一个用于删除非字母数字,一个用于删除重复)。制作超级复杂的正则表达式是没有用的,特别是如果你必须处理/修改它们
    • @jonathanp var filters = oldString.replace(/[^\w\s]/g, "").replace(/(.)(?=\1)/gi, "") ;
    • @Pascalius 是的。因为这个问题不需要它。该问题明确使用\w,即a-zA-Z0-9
    • @Faks /[^\w\s]|(.)(?=\1\1)/gi 将仅在至少有三个 aaa 时删除,并且将单独留下 aa
    【解决方案2】:

    \1+ 是关键

    "aabcdd".replace(/(\w)\1+/g, function (str, match) {
        return match[0]
    }); // abcd
    

    【讨论】:

      【解决方案3】:

      非正则表达式版本:

      var oldString = "aabcd*def%gGGhhhijkklmnoP\122";
      var newString = "";
      
      var len = oldString.length;
      var c = oldString[0];
      for ( var i = 1; i < len; ++i ) {
        if ( c != oldString[i] ) {
          newString += c;
        }
        c = oldString[i];
      }
      

      【讨论】:

      • 嗨,删除重复字符做得很好,所以你建议先运行我的正则表达式然后执行上面的?
      【解决方案4】:

      简短而简单的输入=Brahmananda 输出:Brahmnd 参考:http://jsfiddle.net/p7yu8etz/5/

      var str = "Brahmananda";
      var reg = /(.)(.*?)(\1)/g;
      while (reg.test(str))
      str = str.replace(reg, "$1$2");
      $("div").text(str);
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <div><div>

      【讨论】:

        猜你喜欢
        • 2019-05-12
        • 2011-07-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 2021-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多