我想寫一個正則表達式提取字符串中的所有重複字符。他們不需要連續。所以對於字符串abacb
我想提取[a, b]
。正則表達式來提取所有重複字符
不幸的是,我只能想出方法,只給我a
。喜歡:
/(\w).+?(?:\1)/.exec('abacb');
// Array [ "aba", "a" ]
所有幫助將不勝感激!
我想寫一個正則表達式提取字符串中的所有重複字符。他們不需要連續。所以對於字符串abacb
我想提取[a, b]
。正則表達式來提取所有重複字符
不幸的是,我只能想出方法,只給我a
。喜歡:
/(\w).+?(?:\1)/.exec('abacb');
// Array [ "aba", "a" ]
所有幫助將不勝感激!
短溶液:
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);
或者Ecmascript6使用Set對象和spread operator方法:
var str = 'aaaaabcbaa',
result = str.match(/(\w)(?=.*?\1)/gm);
if (result) {
result = [...new Set(result)];
}
console.log(result);
另一種方法是將字符串轉換爲數組,然後應用過濾器
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);
我不得不說我真的很喜歡這個解決方案!謝謝! – Wannes
您可以將字符存儲中的對象,甚至算多少每個字符發生的次數。
var string = "Lorem ipsum dolor sit amet ...";
var chars = {};
string.split("").forEach(function(chr) {
if (chars.hasOwnProperty(chr)) {
chars[chr]++;
} else {
chars[chr] = 1;
}
});
console.log(Object.keys(chars));
console.log(chars);
'.match(/(\ w)的(?=。*?\ 1)/克)'將不能很好地一起工作''ABA \ NCB \ n''串。 –
不錯!只有'str ='aaa''返回'[a,a]'。但我也可以檢查結果數組是否有重複。 – Wannes
@WiktorStribiżew,不太確定。在這種情況下,所有的空格都應該被認爲是'\ r \ t \ n \ ....' – RomanPerekhrest