ใช้ match() กับ Regex กลุ่มตัวอักษรซ้ำติดกัน
Regex /(.)\1*/g จับกลุ่มตัวอักษรที่ซ้ำติดกัน (เช่น JJJJ, HHHH)
ตัวอย่างโค้ด
var originalString = "JJJJOHHHHNNNSSSMMMIIITTTTHHH";
var regularExpression = /(.)\1*/g;
console.log("สตริงต้นฉบับ = " + originalString);
var splitting = originalString.match(regularExpression);
console.log("หลังแยก = ");
console.log(splitting);
วิธีรัน
node fileName.js
ผลลัพธ์
สตริงต้นฉบับ = JJJJOHHHHNNNSSSMMMIIITTTTHHH
หลังแยก = [ 'JJJJ', 'O', 'HHHH', 'NNN', 'SSS', 'MMM', 'III', 'TTTT', 'HHH' ]
คำอธิบาย Regex
(.): จับตัวอักษรตัวใดตัวหนึ่ง (กลุ่มที่ 1)\1*: อ้างอิงกลุ่มที่ 1 ซ้ำ 0 ครั้งขึ้นไป (backreference)/g: Global - หาทุกครั้งในสตริง
ประยุกต์ใช้: Run-Length Encoding (RLE)
const rle = originalString.match(/(.)\1*/g)
.map(group => group.length + group[0])
.join('');
console.log(rle); // "4J1O4H3N3S3M3I4T3H"