Ekstraksi Html Dan Teks Dengan Regex - Dewa Blogger

Halaman

    Social Items

Buy Now

Ekstraksi Html Dan Teks Dengan Regex

Ekstraksi Umum

Memisahkan antara tag HTML dengan teks di sekitarnya:

var test = 'foo <a b="c">bar</a> baz <b> qux yo"s <c><d> wut?'; var results = test.match(/(<\/?[-:\w]+(?:\s[^<>]*?)?>)|([^<>]+)/g);  console.log(results);

Hasil:

[     'foo ',     '<a b="c">',     'bar',     '</a>',     ' baz ',     '<b>',     ' qux yo"s ',     '<c>',     '<d>',     ' wut?' ]

Dengan cara ini Anda sanggup melaksanakan manipulasi teks dengan kondusif tanpa harus mensugesti tag HTML. Caranya ialah dengan mengecek terlebih dahulu apakah anggota merupakan tag HTML atau teks:

var output = ""; for (var i = 0, len = results.length; i < len; ++i) {     var s = results[i];     // Is this a HTML tag or text?     if (s && s[0] === '<' && s.slice(-1) === '>') {         // this is a HTML tag …         output += s;     } else {         // do something with text …         output += s.replace(/"/g, '&quot;');     } }  console.log(output);

Hasil:

'foo <a b="c">bar</a> baz <b> qux yo&quot;s <c><d> wut?'

Ekstraksi Spesifik

Kode di bawah ini akan memisahkan antara tag HTML dengan nama tertentu saja, sehingga teks sanggup saja berisi tag HTML yang diperbolehkan. Ini mempunyai kegunaan kalau Anda ingin melaksanakan manipulasi teks di luar tag tertentu saja, contohnya tag <kbd>, <pre>, <script> dan <style>:

var test = 'foo <a b="c">bar</a> baz <b> qux yo"s <c><d> wut? <kbd>ignore this yo"s</kbd>'; var results = [];  test.replace(/(.*?)(<\/?(?:kbd|pre|script|style)(?:\s[^<>]*?)?>|$)/g, function(a, b, c) {     b && results.push(b);     c && results.push(c); });  console.log(results);

Hasil:

[     'foo <a b="c">bar</a> baz <b> qux yo"s <c><d> wut? ',     '<kbd>',     'ignore this yo"s',     '</kbd>' ]

Berikut ini ialah cara mengubah huruf " yang berada di luar tag <kbd> menjadi &quot;:

var output = ""; var skip = false; for (var i = 0, len = results.length; i < len; ++i) {     var s = results[i];     if (s && s[0] === '<' && s.slice(-1) === '>') {         // check whether the HTML tag is an opening or closing tag …         skip = s[1] && s[1] !== '/';         output += s;     } else {         output += !skip ? s.replace(/"/g, '&quot;') : s; // replace or skip …     } }  console.log(output);

Hasil:

'foo <a b=&quot;c&quot;>bar</a> baz <b> qux yo&quot;s <c><d> wut? <kbd>ignore this yo"s</kbd>'

Versi PHP

PHP sudah mempunyai fungsi khusus untuk menangani kiprah ini:

$test = 'foo <a b="c">bar</a> baz <b> qux yo"s <c><d> wut?'; $results = preg_split('#(<\/?[-:\w]+(?:\s[^<>]*?)?>)#', $test, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);  var_dump($results);

Untuk melaksanakan ekstraksi tag HTML secara spesifik:

$results = preg_split('#(<\/?(?:kbd|pre|script|style)(?:\s[^<>]*?)?>)#', $test, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

Sumber https://www.dte.web.id/