这应该使用正则表达式;
其实,我不知道这个正则表达式是如何工作的,但我知道它的'速记',所以,我会更好地向你解释这个/(.+)(?=.*?\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