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

Wan*_*nes 2 javascript regex

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

不幸的是,我只能提出让我公正的方法a.喜欢:

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

所有帮助将不胜感激!

Rom*_*est 5

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

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

console.log(result);
Run Code Online (Sandbox Code Playgroud)

(\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);
Run Code Online (Sandbox Code Playgroud)

或使用Set对象和spread运算符的Ecmascript6方法:

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

if (result) {
    result = [...new Set(result)];
}
console.log(result);
Run Code Online (Sandbox Code Playgroud)