2013-10-10 68 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);

相關問題