SOURCE

let info = `#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.000000,
#EXT-X-PRIVINF:FILESIZE=3193744
2593BB1CC6230F8E4807030765E5A483-00001.ts
#EXTINF:10.000000,
#EXT-X-PRIVINF:FILESIZE=3397724
2593BB1CC6230F8E4807030765E5A483-00002.ts
#EXTINF:10.50000,
#EXT-X-PRIVINF:FILESIZE=1531072, CC=2
2593BB1CC6230F8E4807030765E5A483-00003.ts
#EXT-X-ENDLIST`

function parseM3u8(info) {
    if(!info.includes('#EXTM3U')) {
        return 'This is not a m3u8';
    }
    info = info.split(/\n/);
    let re = [];
    let obj = {};
    let count = -1;
    for (let i of info){
        if (i.includes('#EXTINF')){
            count++
            obj = {index: count}; //重置对象
            duration = i.match(/:(\S*),/)[1];
            obj['duration'] = Number(duration);
        }
        if (i.includes('#EXT-X-PRIVINF')) {
            let str = i.split(':')[1];
            let list = str.split(', ');
            for (let entry of list) {
                let [key, value] = entry.split('=');
                obj[key.toLowerCase()] = value;
            }
        }
        if (i.includes('.ts')) {
            obj['url'] = i;
            re.push(obj);
        }
    }
    return re;
}

console.log(parseM3u8(info))
console 命令行工具 X clear

                    
>
console