Saya baru di sini, mohon berbaik hati. Saya mencoba mengimpor file teks ke dalam daftar bersarang HTML. Output HTML yang saya coba capai akan terlihat seperti ini:

    <ul>
        <li>FAVORITE SITES
            <ul>
                <li>eBay</li>
                <li>Google</li>
            </ul>
        </li>
        <li>AVOIDED SITES
            <ul>
                <li>Yahoo</li>
                <li>CraigsList</li>
            </ul>
        </li>
        <li>OTHER SITES
            <ul>
                <li>Alexa</li>
                <li>Amazon</li>
                <li>Jet</li>
            </ul>
        </li>
    </ul>

File teks yang saya muat menggunakan <input type="file"> tidak diformat dengan cara biasa - ini bukan JSON atau CSV, formatnya seperti di bawah ini:

FAVORITE SITES {
!Variable=eBay
!Variable=Google
}

AVOIDED SITES {
!Variable=Yahoo
!Variable=CraigsList
}

OTHER SITES {
!Variable=Alexa
!Variable=Amazon
!Variable=Jet
}

Apakah ada cara untuk memuat parse dan memasukkan nilai file teks dan memuatnya ke dalam daftar meskipun file dalam format non-standar ini atau apakah saya perlu mengubah format file teks? Bantuan apa pun akan dihargai, terima kasih.

3
Disciple Day 16 Agustus 2017, 08:52

2 jawaban

Jawaban Terbaik
let s = `FAVORITE SITES {
!Variable=eBay
!Variable=Google
}

AVOIDED SITES {
!Variable=Yahoo
!Variable=CraigsList
}

OTHER SITES {
!Variable=Alexa
!Variable=Amazon
!Variable=Jet
}`;

var ul = document.createElement('ul');

ul.innerHTML = s.replace(/(\})/gim, "</ul>\n</li>")
         .replace(/\{/gim, "\n<ul>")
         .replace(/!Variable=(\w+)\s*\n/gim, "<li>$1</li>\n")
         .split(/\s*\n\s*\n/)
         .map(v => v = '\n<li>' + v)
         .join('');

document.body.appendChild(ul);
2
qiAlex 16 Agustus 2017, 06:42

Silakan referensi cuplikan kode ini;

// assign the file content to s
let s = `FAVORITE SITES {
!Variable=eBay
!Variable=Google
}

AVOIDED SITES {
!Variable=Yahoo
!Variable=CraigsList
}

OTHER SITES {
!Variable=Alexa
!Variable=Amazon
!Variable=Jet
}`;

let a = s.replace(/[\n\r]/g, '').split(/(.+?) \{(.+?)\}/g);

for (let i = 0; i < a.length - 1; i += 3) {
    // a[i + 1] is the outer li text
    let a2 = a[i + 2].split(/!Variable=([^!]+)/g);
    // every 2nd item of a2 is the inner li text
    // or you can filter out '' items
    // you can apply the same trick to a as well, but need to modify for-loop accordingly
    let a3 = a2.filter(v => v !== '');
    // now all items are a3 can be used directly as inner li text
}
1
tibetty 16 Agustus 2017, 06:25