โœจsplit into course names

// ๅฆ‚๏ผš'ๅœ‹่ชžๆ–‡1011010101(25)' -> 'ๅœ‹่ชžๆ–‡'
function courseName(courseCode){
    
    // 1. ็ง‘็›ฎๅ็จฑ (้žๆ•ธๅญ—ใ€็ฉบ็™ฝใ€้€—่™Ÿ)
    // 2. ็ง‘็›ฎไปฃ็ขผ (ๆ•ธๅญ—้–‹้ ญใ€่‹ฑๆ•ธๅญ—ๅพŒ็บŒ)
    // 3. ๅญธ็”Ÿๆˆ็ธพ (ไธ€ๅˆฐไบŒไฝๆ•ธ)
    //                               โ•ญโ”€โ”€ 1 โ”€โ”€โ•ฎ  โ•ญโ”€โ”€โ”€ 2 โ”€โ”€โ”€โ•ฎ    โ•ญโ”€ 3 โ”€โ•ฎ
    const found = courseCode.match(/([^\d\s,]+)(\d[0-9A-Z]+)\((\d{1,2})\)/);
    
    if(!found) return null;
    return found[1];            // capture group 1
}

// ๅฆ‚๏ผš'ๅœ‹่ชžๆ–‡1011010101(25),่‹ฑ่ชžๆ–‡1011010102(14)' -> ['ๅœ‹่ชžๆ–‡', '่‹ฑ่ชžๆ–‡']
function splitIntoCourseNames(courseCodes){
    return courseCodes
        .replaceWhitespaces('')    // ๅŽป็ฉบ็™ฝ   (string)
        .split(',')                // ็ง‘็›ฎๅ็จฑ+็ง‘็›ฎไปฃ็ขผ+ๅญธ็”Ÿๆˆ็ธพ (array)
        .map(s => courseName(s));  // ็ง‘็›ฎๅ็จฑ (array)
}

let courses = splitIntoCourseNames('ๅœ‹่ชžๆ–‡1011010101(25),่‹ฑ่ชžๆ–‡1011010102(14),ๆ•ธๅญธA1011010204(15),ๆญทๅฒ1011010309(32),่—่ก“็”Ÿๆดป101101050W(15),้ซ”่‚ฒ1011010815(36),ๅœ‹ๅญธๅธธ่ญ˜1013010101(12),ๆŽข็ฉถ่ˆ‡ๅฏฆไฝœ๏ผšๅœฐ็†่ˆ‡ไบบๆ–‡็คพๆœƒ็ง‘ๅญธ็ ”็ฉถ101301030H(12)');
// [
//   'ๅœ‹่ชžๆ–‡',
//   '่‹ฑ่ชžๆ–‡',
//   'ๆ•ธๅญธA',
//   'ๆญทๅฒ',
//   '่—่ก“็”Ÿๆดป',
//   '้ซ”่‚ฒ',
//   'ๅœ‹ๅญธๅธธ่ญ˜',
//   'ๆŽข็ฉถ่ˆ‡ๅฏฆไฝœ๏ผšๅœฐ็†่ˆ‡ไบบๆ–‡็คพๆœƒ็ง‘ๅญธ็ ”็ฉถ'
// ]

Last updated