Kunci jawaban 09 Latihan Regular Expression. Untuk regex, sering ada beberapa jawaban valid; punyamu boleh beda asal lolos semua tes.

9.1 Regexp Golf

verify(/ca[rt]/, ["my car", "bad cats"], ["camper", "high art"]);
verify(/pr?op/, ["pop culture", "mad props"], ["plop", "prrrop"]);
verify(/ferr(et|y|ari)/, ["ferret", "ferry", "ferrari"], ["ferrum", "transfer A"]);
verify(/ious(\P{L}|$)/u, ["how delicious", "spacious room"], ["ruinous", "consciousness"]);
verify(/\s[.,:;]/, ["bad punctuation ."], ["escape the dot"]);
verify(/\p{L}{7}/u, ["Siebentausenddreihundertzweiundzwanzig"], ["no", "three small words"]);
verify(/(^|\P{L})[^\P{L}e]+(\P{L}|$)/ui, ["red platypus", "wobbling nest"], ["earth bed", "bedrøvet abe", "BEET"]);

Kenapa tiap pola:

  1. [rt] = pilih r atau t di posisi terakhir.
  2. r? = huruf r opsional (pop/prop).
  3. Awalan bersama ferr lalu grup alternatif tiga akhiran.
  4. ious harus diikuti non-huruf atau ujung string, jadi consciousness (huruf lanjut) gak lolos.
  5. \s lalu himpunan tanda baca (titik di dalam [] gak perlu di-escape).
  6. Tujuh huruf berturut = lebih dari enam.
  7. [^\P{L}e] = “bukan (non-huruf atau e)” = huruf selain e; diapit non-huruf/ujung, dengan flag i supaya E besar ikut ditolak.

→ Soal: 09 Latihan Regular Expression > 9.1 Regexp Golf

9.2 Gaya Kutip

let teks = "'I'm the cook,' he said, 'it's my job.'";
console.log(teks.replace(/(^|\P{L})'|'(\P{L}|$)/gu, '$1"$2'));
// → "I'm the cook," he said, "it's my job."

Kenapa: kutip di I'm dan it's diapit huruf di kedua sisi, jadi gak cocok cabang mana pun dan dibiarkan. Kutip pembuka cocok cabang pertama (didahului awal string atau non-huruf, disimpan di $1), kutip penutup cocok cabang kedua (diikuti non-huruf atau akhir, di $2). Karakter pengapitnya dikembalikan lewat $1"$2 supaya gak ikut terhapus.

→ Soal: 09 Latihan Regular Expression > 9.2 Gaya Kutip

9.3 Angka Lagi

let angka = /^[+\-]?(\d+(\.\d*)?|\.\d+)([eE][+\-]?\d+)?$/;

Kenapa: dibaca dari kiri — ^ awal; [+\-]? tanda opsional; grup mantissa dengan dua cabang: \d+(\.\d*)? menangani 1, 1.55, 5., sedangkan \.\d+ menangani .5; grup eksponen opsional [eE][+\-]?\d+; $ akhir. Karena kedua cabang mantissa mengharuskan minimal satu digit, titik sendirian (.) gagal — persis yang diminta.

→ Soal: 09 Latihan Regular Expression > 9.3 Angka Lagi