Saya mempunyai rentetan ringkas dengan beberapa aksara berulang. Bolehkah seseorang membantu saya membetulkan ungkapan di bawah untuk mengalih keluar bukan sahaja aksara pendua tetapi semua aksara yang berlaku lebih daripada 1 kali.
console.log('aaabbxxstring'.replace(/(.)(?=.*?)/g,'')); // string
Saya menggunakan lookahead untuk menangkap watak yang sepadan dan menggantikan padanan dengan ruang. Persoalannya ialah bagaimana untuk menggantikan kumpulan penangkap itu sendiri. Atau adakah keseluruhan pendekatan tidak betul?
console.log('aaabbxxstring'.replace(/(.)+/g, '')); // string
Penerangan:
(.) captures a single character. + matches one or more occurrences of the captured character. /g performs a global search to replace all occurrences.
Apabila anda membelah rentetan di sekeliling aksara, gunakan panjang tatasusunan yang terhasil untuk mengira kejadian.
str.split(c).length
Memberi anda bilangan kejadian tambah 1.
Tukar rentetan kepada tatasusunan, tapis menggunakan kiraan kejadian, cantumkan kepada rentetan.
var str = 'aaabxbxxstring';
const count = (str, c) => str.split(c).length - 1
str = [...str].filter(c => count(str,c) < 2).join('')
console.log(str);