2013-10-10 3 views
7

Я нашел способ удаления повторяющихся символов из строки с использованием регулярных выражений.Regex удалить повторяющиеся символы из строки по 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"; output = "bcsa", но я хочу что-то вроде abcs –

+0

@Lindrian: да, это или какой-то другой метод из http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript – georg

3

Это старый questio n, но в ES6 мы можем использовать Sets. Код выглядит следующим образом:

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

 
console.log(result);

Смежные вопросы