【问题标题】:Regex remove repeated characters from a string by javascript正则表达式通过javascript从字符串中删除重复字符
【发布时间】:2023-03-25 19:45:01
【问题描述】:

我找到了一种使用正则表达式从字符串中删除重复字符的方法。

function RemoveDuplicates() {
    var str = "aaabbbccc";
    var filtered = str.replace(/[^\w\s]|(.)\1/gi, "");  
    alert(filtered);
}

输出:abc 这工作正常。

但如果str = "aaabbbccccabbbbcccccc" 则输出为abcabc。 有没有办法只获取唯一字符或删除所有重复字符? 有什么办法请告诉我。

【问题讨论】:

  • 顺序重要吗?换句话说,第一次出现的字符是你保存的那个吗?
  • 我希望删除重复字符后的字符顺序相同。唯一的一个。

标签: javascript regex


【解决方案1】:

类似“这个,后面跟着某事和这个”的前瞻:

var str = "aaabbbccccabbbbcccccc";
console.log(str.replace(/(.)(?=.*\1)/g, "")); // "abc"

请注意,这会保留每个字符的最后次出现:

var str = "aabbccxccbbaa";
console.log(str.replace(/(.)(?=.*\1)/g, "")); // "xcba"

没有正则表达式,保持顺序:

var str = "aabbccxccbbaa";
console.log(str.split("").filter(function(x, n, s) {
  return s.indexOf(x) == n
}).join("")); // "abcx"

【讨论】:

  • 我问过迈克,但他还没有回答。您的解决方案是我会采用的解决方案,如果您需要保持秩序,str.split("").reverse().join("") 不会解决问题吗?
  • 通过运行此代码...字符串没有以相同的顺序出现。 if var str = "aaabbbcccaabbbcccaaaaaaaaasa"; output = "bcsa" 但我想要 abcs 之类的东西
  • @Lindrian: 是的,那个,或者来自blog.stevenlevithan.com/archives/mimic-lookbehind-javascript的其他方法
  • 你将如何保留第一次出现?
【解决方案2】:

这是一个老问题,但在 ES6 中我们可以使用Sets。代码如下所示:

var test = 'aaabbbcccaabbbcccaaaaaaaasa';
var result = Array.from(new Set(test)).join('');

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2018-01-26
    相关资源
    最近更新 更多