JavaScript正则表达式去除字符串中的重复字符

25

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

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

输出:abc,这个工作正常。

但是如果str = "aaabbbccccabbbbcccccc" ,那么输出就是 abcabc。 是否有办法仅获取唯一的字符或删除所有重复的字符? 如果有方法,请告诉我。


顺序是否重要?换句话说,第一个字符的出现是否是你需要保存的? - Firas Dib
我想在去重后保持相同的字符顺序,只保留唯一的字符。 - SK.
2个回答

57

向前查看,类似于"this, followed by something and this":

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"


我问过Mike,但他还没有回答。你的解决方案是我会选择的一个,如果你需要保留顺序,那么 str.split("").reverse().join("") 不就可以了吗? - Firas Dib
2
通过运行这段代码... 字符串的顺序不一致。如果变量str = "aaabbbcccaabbbcccaaaaaaaasa"; 输出结果是"bcsa",但我想要类似于"abcs"的结果。 - SK.
@Lindrian:是的,那个或者从http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript选择其他方法。 - georg
你如何保留第一次出现的内容? - Daniel Duong

15

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

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

console.log(result);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接