正则表达式提取所有重复的字符

时间:2017-02-05 22:22:14

标签: javascript regex

我正在尝试编写一个提取字符串中所有重复字符的正则表达式。他们不需要连续。因此,对于字符串abacb,我想要提取[a, b]

不幸的是,我只能提出一些只给我a的方法。像:

    /(\w).+?(?:\1)/.exec('abacb');
    // Array [ "aba", "a" ]

所有帮助将不胜感激!

3 个答案:

答案 0 :(得分:5)

使用具有特定正则表达式模式的String.prototype.match()函数的简短解决方案:



var str = 'abacb',
    result = str.match(/(\w)(?=.*?\1)/g);

console.log(result);




(\w) - 首先捕获包含重复字符的组

\1 - 对第一个捕获组的反向引用(意味着重复某些字符)

要仅获取唯一匹配的字符,请使用Array.prototype.filter()Array.prototype.lastIndexOf()函数:



var str = 'aaaaabcbaa',
    result = str.match(/(\w)(?=.*?\1)/gm);

if (result) {
    result = result.filter(function(c, i, a) { return i === a.lastIndexOf(c); })
}
console.log(result);




使用Set对象和 spread operator

Ecmascript6 方法:



var str = 'aaaaabcbaa',
    result = str.match(/(\w)(?=.*?\1)/gm);

if (result) {
    result = [...new Set(result)];
}
console.log(result);




答案 1 :(得分:1)

另一种方法是将字符串转换为数组,然后应用过滤器

var str='cabccb';
var arr=str.split('');
var duplicate_entry = arr.reduce(function(acc, el, i, arr1) {
  if (arr1.indexOf(el) !== i && acc.indexOf(el) < 0) acc.push(el); return acc;
}, []);
console.log(duplicate_entry);

答案 2 :(得分:1)

您可以将字符存储在对象中,甚至可以计算每个字符出现的次数。

plugin -install lmenezes/elasticsearch-kopf