Questo dovrebbe funzionare utilizzando Regex;
NOTA: In realtà, non so come funziona questa regex, ma conoscevo la sua 'stenografia', quindi, vorrei spiegarti meglio il significato di questo /(.+)(?=.*?\1)/g;
. questa regex restituisce solo il carattere duplicato in un array, quindi l'ho passato in loop per ottenere la lunghezza dei caratteri ripetuti.ma questo non funziona per caratteri speciali come "#" "_" "-",
ma fornisce risultati attesi; compresi quelli caratteri speciali if any
function removeDuplicates(str){
var REPEATED_CHARS_REGEX = /(.+)(?=.*?\1)/g;
var res = str.match(REPEATED_CHARS_REGEX);
var word = res.slice(0,1);
var raw = res.slice(1);
var together = new String (word+raw);
var fer = together.toString();
var length = fer.length;
// my sorted duplicate;
var result = '';
for(var i = 0; i < str.length; i++) {
if(result.indexOf(str[i]) < 0) {
result += str[i];
}
}
return {uniques: result,duplicates: length};
} removeDuplicates('anaconda')
L'espressione regolare /([a-zA-Z])\1+$/
è alla ricerca di:
([a-zA-Z]])
- Una lettera che si coglie nel primo gruppo; poi \1+
- immediatamente dopo una o più copie di quella lettera; poi $
- la fine della stringa. sostituendolo a /([a-zA-Z]).*?\1/
cerca invece:
([a-zA-Z])
- Una lettera che cattura nel primo gruppo; quindi .*?
- zero o più caratteri (il simbolo? indica il minor numero possibile); fino a \1
- trova una ripetizione del primo carattere abbinato.
Sembra che vi manca un po 'di codice? jsfiddle.net è ottimo anche per questo tipo di domande. – WildCrustacean
http://jsfiddle.net/mplungjan/FHUgY/ funziona per me - Ottengo il granaio – mplungjan
me, anche IE 8 – nozzleman