我正在尝试编写一个提取字符串中所有重复字符的正则表达式.他们不需要连续.所以对于abacb我想要提取的字符串[a, b].
不幸的是,我只能提出让我公正的方法a.喜欢:
/(\w).+?(?:\1)/.exec('abacb');
// Array [ "aba", "a" ]
Run Code Online (Sandbox Code Playgroud)
所有帮助将不胜感激!
使用具有特定正则表达式模式的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)
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |