2013-10-10 35 views
7

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

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

输出:abc 这是工作的罚款。

但是,如果str = "aaabbbccccabbbbcccccc"则输出为abcabc。 有没有什么办法只得到唯一的字符或删除所有重复的字符? 请让我知道是否有任何方法。

+0

是否为了此事?换句话说,角色的第一次出现是否是您保存的角色? –

+0

我想删除重复的一个字符后在相同的序列中。唯一一个。 –

回答

22

先行像 “这样,后面的东西,这个”:

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

注意,这保留了最后发生的每个字符的:

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

没有正则表达式,维持秩序:

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

我问迈克,但他还没有回答。你的解决方案就是我将要使用的解决方案,如果你需要保持顺序,不会'str.split(“”)。reverse()。join(“”)'做窍门吗? –

+1

通过运行此代码...字符串不是在相同的seqeunce。如果var str =“aaabbbcccaabbbcccaaaaaaaasa”;输出=“bcsa”,但我想要像abcs –

+0

@林德里安:是的,或从http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript其他方法 – georg

3

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

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

 
console.log(result);

相关问题