這應該使用正則表達式;
其實,我不知道這個正則表達式是如何工作的,但我知道它的'速記',所以,我會更好地向你解釋這個/(.+)(?=.*?\1)/g;
的含義。 這個正則表達式只返回給我一個數組中的重複字符,所以我通過它來獲得重複字符的長度。但這不適用於像"#" "_" "-",
這樣的特殊字符,但它會給您預期的結果;包括那些特殊字符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')
正則表達式/([a-zA-Z])\1+$/
正在尋找:
([a-zA-Z]])
- 它在第一組中捕獲的信;然後 \1+
- 緊隨其後的那封信的一個或多個副本;然後 $
- 字符串的結尾。 它更改爲/([a-zA-Z]).*?\1/
代替搜索:
([a-zA-Z])
- 它在第一組中捕獲的信;然後 .*?
- 零個或多個字符(?表示儘可能少);直到 \1
- 它找到第一個匹配字符的重複。
看起來你缺少一些代碼? jsfiddle.net也適用於這類問題。 – WildCrustacean
http://jsfiddle.net/mplungjan/FHUgY/爲我工作 - 我得到穀倉 – mplungjan
我,甚至IE 8 – nozzleman