Regular Expression (Regex) JavaScript Lengkap

Created at by Aris Munandar

Apakah kamu pernah ingin mencari pola tertentu di dalam teks, memvalidasi input form, atau memproses data string dengan cepat di JavaScript? Jika iya, Regular Expression atau yang sering disingkat Regex adalah alat yang tepat untuk kamu pelajari. Regex memungkinkan kamu menemukan, memeriksa, dan memanipulasi teks dengan cara yang jauh lebih efisien dibandingkan menggunakan logika string biasa.

Dalam artikel ini, kita akan membahas Regex JavaScript secara lengkap, mulai dari dasar-dasar, metode populer seperti test, match, replace, hingga penggunaan regex untuk validasi email, nomor telepon, password, dan berbagai kasus praktis lainnya. Panduan ini dibuat langkah demi langkah, cocok untuk pemula maupun pengembang web yang ingin memperdalam kemampuan pattern matching dan optimasi regex di proyek nyata.

Baca juga: Error Handling di JavaScript: Try, Catch, Finally

Pengenalan Regular Expression

Pengenalan Regular Expression (Regex) adalah langkah pertama untuk memahami bagaimana pola teks bekerja dalam JavaScript. Regex merupakan sebuah pola karakter yang digunakan untuk mencari, mencocokkan, dan memanipulasi string dengan cara yang efisien. Dibandingkan metode pencarian teks biasa, regex menawarkan fleksibilitas dan kekuatan yang jauh lebih besar—mulai dari pencarian sederhana hingga validasi input kompleks seperti email, nomor telepon, dan password.

Dalam JavaScript, regular expression sudah terintegrasi secara native, sehingga penggunaannya sangat mudah dan tidak memerlukan library tambahan. Materi pengenalan ini akan membahas apa itu regex, bagaimana sejarahnya digunakan dalam berbagai bahasa pemrograman, keunggulannya di JavaScript, hingga contoh studi kasus pencarian teks. Dengan memahami dasar pengenalan regex, kamu akan mampu menggunakan pattern matching dengan lebih percaya diri dan efisien saat membangun aplikasi web modern.

1. Apa itu Regular Expression

Regular Expression atau Regex adalah sebuah pola (pattern) yang digunakan untuk mencari, mencocokkan, dan memanipulasi teks. Dalam JavaScript, regex sangat berguna untuk memvalidasi input, menemukan karakter tertentu, memfilter data, hingga melakukan transformasi teks dengan cara yang jauh lebih efisien dibandingkan metode string biasa. Regex bekerja dengan cara mencocokkan pola tertentu pada string, seperti huruf, angka, simbol, atau kombinasi kompleks.

Dalam pengembangan web modern, regex menjadi salah satu alat penting karena mampu menghemat banyak waktu dan baris kode. Dengan satu pola regex, kamu dapat menyelesaikan tugas yang biasanya membutuhkan kondisi if bertingkat atau loop yang panjang.

2. Sejarah dan penggunaan regex di berbagai bahasa pemrograman

Regular Expression pertama kali diperkenalkan pada tahun 1950-an oleh ilmuwan bernama Stephen Cole Kleene, yang mengembangkan teori matematika tentang pola simbolik. Konsep ini kemudian diadopsi ke dunia pemrograman dan digunakan dalam berbagai utilitas sistem seperti grep, sed, dan awk.

Saat ini, regex digunakan secara luas di berbagai bahasa pemrograman populer seperti:

  • JavaScript
  • Python
  • PHP
  • Java
  • C#
  • Ruby
  • Perl (bahasa yang dikenal sangat kuat dalam regex)

Meskipun sintaks regex bersifat universal, beberapa bahasa memiliki fitur tambahan atau variasi kecil. Namun secara keseluruhan, dasar penggunaannya tetap sama: membantu developer mengolah teks secara cepat dan efisien.

3. Keunggulan menggunakan regex di JavaScript

JavaScript memiliki dukungan bawaan (native) untuk Regular Expression melalui RegExp object, sehingga penggunaannya sangat fleksibel dan mudah diintegrasikan ke berbagai fungsi string. Berikut beberapa keunggulan utama menggunakan regex di JavaScript:

  1. Native support
    Tidak perlu menginstal library tambahan, cukup gunakan /pattern/ atau new RegExp().

  2. Integrasi kuat dengan metode string
    Regex dapat digunakan langsung di method seperti match(), replace(), search(), dan split().

  3. Performa tinggi
    Regex memungkinkan operasi pencarian dan validasi dilakukan lebih cepat dibandingkan logika manual.

  4. Lebih ringkas dan efisien
    Alih-alih menulis banyak kondisi, cukup gunakan satu pola regex untuk hasil yang sama.

  5. Cocok untuk validasi input modern
    Mulai dari email, password, nomor telepon, hingga format tanggal.

Dengan berbagai keunggulan ini, regex menjadi alat yang sangat penting bagi developer JavaScript—baik backend, frontend, maupun full stack.

4. Studi kasus sederhana: pencarian teks

Salah satu penggunaan paling dasar dari regex adalah mencari teks. Misalnya, kamu ingin mencari apakah sebuah kata muncul dalam sebuah kalimat. Dengan regex, ini bisa dilakukan dalam satu baris:

const text = "Belajar regex di JavaScript memang menyenangkan!";
const pattern = /regex/;

console.log(pattern.test(text)); // trueCode language: JavaScript (javascript)

Contoh lain: mencari semua huruf vokal dalam sebuah string.

const kalimat = "Regular Expression sangat berguna!";
const vokal = kalimat.match(/[aeiou]/gi);

console.log(vokal);
// Output: ["e", "u", "a", "E", "e", "i", "o", "a", "a", "e", "u", "a"]Code language: JavaScript (javascript)

Penggunaan sederhana ini menggambarkan kekuatan regex sebagai alat pencarian dan analisis teks dengan cara yang cepat dan efisien.

Sintaks Dasar Regex di JavaScript

Sintaks adalah fondasi utama dalam memanfaatkan regular expression JavaScript. Untuk dapat membuat pola yang akurat dan efisien, kamu perlu memahami cara membuat regex, karakter dasar yang digunakan, hingga bagaimana flags bekerja dalam proses pencarian. Bagian ini akan membantu kamu memahami konsepnya secara bertahap.

1. Membuat Regex: Literal vs Constructor

Dalam JavaScript, regex dapat dibuat dengan dua cara:

1. Regex Literal

Cara paling umum dan simpel.

const regex = /hello/;Code language: JavaScript (javascript)

Keunggulannya:

  • Lebih mudah dibaca
  • Lebih cepat dituliskan
  • Ideal untuk pola statis

2. Regex Constructor

Digunakan saat pola regex bersifat dinamis (dibuat dari variable).

const pattern = "hello";
const regex = new RegExp(pattern, "g");Code language: JavaScript (javascript)

Keunggulannya:

  • Mudah untuk membuat pola runtime
  • Dapat menggabungkan nilai variable ke dalam regex

Namun syntax-nya sedikit lebih panjang, dan kamu perlu melakukan escape ekstra saat menggunakan karakter khusus.

2. Karakter Biasa dan Meta Character

Regex terdiri dari dua jenis karakter:

1. Karakter Biasa

Digunakan untuk mencocokkan karakter apa adanya. Contoh:

  • a → mencari huruf “a”
  • cat → mencari kata “cat”

2. Meta Character (Karakter Khusus)

Digunakan untuk memberi arti tertentu pada pola regex.

Contoh meta character penting:

MetaArti
.Mencocokkan sembarang 1 karakter
\dDigit 0–9
\wAlphanumeric + underscore
\sWhitespace
^Awal string
$Akhir string
*0 atau lebih pengulangan
+1 atau lebih pengulangan
?Opsional (0 atau 1 kali)
[]Character set
()Grouping / capturing

Meta character inilah yang membuat regex JavaScript begitu fleksibel dan kuat dalam pattern matching.

3 Flags Regex (g, i, m)

Flags adalah penanda tambahan yang mengubah perilaku regex.

1. g — global

Mencari semua hasil, bukan hanya satu.

"hello hello".match(/hello/g);Code language: JavaScript (javascript)

2. i — case insensitive

Mengabaikan huruf kapital atau kecil.

/hello/i.test("HELLO"); // trueCode language: JavaScript (javascript)

3. m — multiline

Memperlakukan ^ dan $ sebagai awal/akhir setiap baris, bukan keseluruhan string.

/^hi/m.test("hello\nhi"); // trueCode language: JavaScript (javascript)

Flags dapat digabungkan:

/hello/gi;

4. Escape Character dan Special Character

Karena regex memiliki banyak karakter khusus, kamu perlu melakukan escape menggunakan \ ketika ingin mencocokkannya secara literal.

Contoh karakter yang harus di-escape:

. * + ? ^ $ { } ( ) | [ ] \

Contoh penggunaan:

const regex = /\./; // mencari titik "."Code language: JavaScript (javascript)

Jika menggunakan constructor:

const regex = new RegExp("\\.");Code language: JavaScript (javascript)

Karena constructor juga menggunakan escape string JavaScript, kamu harus menggandakan backslash.

Metode Regex di JavaScript

Setelah memahami sintaks dasar regex di JavaScript, langkah berikutnya adalah mempelajari berbagai metode bawaan JavaScript yang sering digunakan bersama regular expression. Metode-metode ini adalah alat utama yang akan kamu pakai untuk melakukan pencocokan pola, mencari teks, memecah string, hingga memodifikasi teks.

Di bagian ini, kita akan membahas semua metode penting yang wajib dikuasai:

  • test()
  • match()
  • replace()
  • search()
  • split()

Setiap metode memiliki fungsi berbeda dan sangat berguna dalam berbagai situasi pemrograman.

1. test() → Cek Pattern

Metode test() digunakan untuk mengetahui apakah sebuah string cocok dengan pola regex. Metode ini akan mengembalikan:

  • true jika ada kecocokan
  • false jika tidak ada kecocokan

Contoh:

const regex = /hello/;
console.log(regex.test("hello world")); // trueCode language: JavaScript (javascript)

Cocok digunakan untuk validasi sederhana, seperti:

  • cek apakah input mengandung angka
  • cek apakah password mengandung huruf besar
  • cek apakah username valid

Contoh validasi angka:

const numberCheck = /\d/;
console.log(numberCheck.test("aris123")); // trueCode language: JavaScript (javascript)

2. match() → Mengambil Hasil Cocok

Metode match() digunakan untuk mengambil semua hasil yang cocok dengan pola tertentu. Jika regex memiliki flag g, hasilnya berupa array semua kecocokan. Tanpa g, hasilnya akan mengembalikan informasi detail termasuk capturing group.

Contoh tanpa flag g:

const text = "Hello JavaScript";
const result = text.match(/Java/);
console.log(result);Code language: JavaScript (javascript)

Outputnya:

  • hasil kecocokan
  • index ditemukan
  • input asli

Contoh dengan flag g:

const text = "apple, banana, apple, mango";
const result = text.match(/apple/g);
console.log(result); // ["apple", "apple"]Code language: JavaScript (javascript)

Metode ini sangat membantu saat mengambil data seperti:

  • list kata tertentu
  • semua angka dalam string
  • format tertentu (email, URL)

3. replace() → Mengganti Teks

Metode replace() digunakan untuk mengganti bagian string yang cocok dengan regex. Fungsi ini sangat sering dipakai dalam pengolahan teks.

Contoh mengganti satu kata:

const text = "Halo dunia!";
console.log(text.replace(/dunia/, "JavaScript"));Code language: JavaScript (javascript)

Contoh mengganti banyak kata (pakai flag g):

const text = "apple banana apple mango";
const result = text.replace(/apple/g, "orange");
console.log(result);Code language: JavaScript (javascript)

Contoh mengganti pola spesifik:

const text = "ID: 123-456";
console.log(text.replace(/\d/g, "*")); // "ID: ***-***"Code language: JavaScript (javascript)

replace() juga mendukung fungsi callback untuk penggantian yang lebih dinamis.

4. search() → Menemukan Index Pattern

Metode search() digunakan untuk menemukan index pertama dari pattern yang cocok dengan regex. Berbeda dengan match(), metode ini hanya mengembalikan:

  • posisi index hasil kecocokan pertama, atau
  • -1 jika tidak ditemukan

Contoh:

const text = "JavaScript sangat keren";
console.log(text.search(/keren/)); // 17Code language: JavaScript (javascript)

Metode ini sangat cocok jika kamu hanya ingin tahu posisi pertama tanpa butuh data detail lain.

5. split() → Memecah String Berdasarkan Pattern

Metode split() digunakan untuk memecah string menjadi array berdasarkan pola regex. Ini lebih fleksibel daripada split biasa yang hanya bisa menggunakan string.

Contoh memecah berdasarkan spasi:

const text = "belajar regex javascript lengkap";
const result = text.split(/\s+/);
console.log(result);Code language: JavaScript (javascript)

Contoh memecah berdasarkan koma dengan optional spasi:

const list = "apel, jeruk,  mangga, pisang";
const result = list.split(/,\s*/);
console.log(result);Code language: JavaScript (javascript)

Contoh mengambil angka dari teks:

const data = "ID-123-456-789";
const numbers = data.split(/\D+/);
console.log(numbers); // ["", "123", "456", "789"]Code language: JavaScript (javascript)

Pattern Matching Lanjutan

Setelah memahami dasar-dasar regex, kini saatnya masuk ke bagian yang lebih seru yaitu pattern matching lanjutan. Di sini kamu akan belajar berbagai teknik yang membuat Regular Expression JavaScript menjadi sangat fleksibel dan kuat. Mulai dari character class, quantifiers, anchors, hingga grouping dan alternation. Semua konsep ini akan memperluas kemampuanmu dalam membuat pola yang lebih kompleks.

Character Class [abc], [^abc]

Apa itu Character Class?

Character class adalah fitur regex yang memungkinkan kamu mencocokkan satu karakter dari beberapa kemungkinan karakter.

Contoh [abc]:

Pola ini berarti mencocokkan salah satu karakter: a, b, atau c.

const regex = /[abc]/;
console.log(regex.test("aris")); // true (ada huruf a)Code language: JavaScript (javascript)

[a-z]

Rentang karakter dari a sampai z.

const regex = /[a-z]/;Code language: JavaScript (javascript)

Negated Class [^abc]

^ di dalam bracket berarti bukan salah satu dari a, b, atau c.

const regex = /[^abc]/;
console.log(regex.test("ddd")); // true (karena bukan a b c)Code language: JavaScript (javascript)

Quantifiers *, +, ?, {n}, {n,m}

Quantifier digunakan untuk menentukan jumlah kemunculan dari sebuah karakter atau grup.

* → 0 atau lebih

const regex = /a*/;
console.log("aaa".match(regex)); // ["aaa"]Code language: JavaScript (javascript)

+ → 1 atau lebih

const regex = /a+/;
console.log("baaa".match(regex)); // ["aaa"]Code language: JavaScript (javascript)

? → 0 atau 1 (opsional)

const regex = /colou?r/;
console.log("color".match(regex)); // ["color"]
console.log("colour".match(regex)); // ["colour"]Code language: JavaScript (javascript)

{n} → tepat n kali

const regex = /\d{3}/;
console.log("Kode: 123".match(regex)); // ["123"]Code language: JavaScript (javascript)

{n,} → minimal n kali

const regex = /\d{2,}/;
console.log("12345".match(regex)); // ["12345"]Code language: JavaScript (javascript)

{n,m} → antara n hingga m kali

const regex = /\d{2,4}/;
console.log("12345".match(regex)); // ["1234"]Code language: JavaScript (javascript)

Anchors ^, $, \b, \B

Anchors digunakan untuk mencocokkan posisi dalam string, bukan karakter.

^ → awal string

const regex = /^Hello/;
console.log(regex.test("Hello world")); // trueCode language: JavaScript (javascript)

$ → akhir string

const regex = /world$/;
console.log(regex.test("Hello world")); // trueCode language: JavaScript (javascript)

\b → word boundary (batas kata)

Digunakan saat ingin mencocokkan pola pada batas kata.

const regex = /\bcat\b/;
console.log(regex.test("black cat white dog")); // trueCode language: JavaScript (javascript)

\B → kebalikan dari \b

const regex = /cat\B/;
console.log(regex.test("category")); // trueCode language: JavaScript (javascript)

Grouping () dan Backreference \1

Grouping digunakan untuk:

  • Mengelompokkan pola
  • Menangkap bagian tertentu (capturing group)
  • Membuat backreference (mengacu ke hasil sebelumnya)

Contoh grouping sederhana

const regex = /(ha)+/;
console.log("hahaha".match(regex)); // ["hahaha"]Code language: JavaScript (javascript)

Backreference \1

\1 mengacu pada hasil group pertama.

const regex = /(\w+)\s\1/;
console.log(regex.test("hello hello")); // trueCode language: JavaScript (javascript)

Cocok untuk mendeteksi teks duplikat.

Alternation |

Fitur ini mirip dengan operator OR, memungkinkan kamu mencocokkan beberapa pola.

Contoh:

const regex = /apple|banana|mango/;
console.log(regex.test("saya makan banana")); // trueCode language: JavaScript (javascript)

Contoh dengan grouping:

const regex = /gr(a|e)y/;
console.log(regex.test("gray")); // true
console.log(regex.test("grey")); // trueCode language: JavaScript (javascript)

Regex untuk Validasi Input

Regex menjadi sangat berguna dalam proses validasi input, terutama pada aplikasi web yang membutuhkan pengecekan cepat sebelum data dikirim ke server. Validasi input dengan regex di JavaScript memberikan fleksibilitas tinggi, efisiensi, dan dapat mencegah berbagai error maupun data tidak valid sejak dini.

Pada bagian ini, kita akan membahas cara membuat pola regex untuk memvalidasi email, nomor telepon, password, URL, hingga IP address, lengkap dengan contoh implementasinya dalam form validation JavaScript.

Validasi Email

Validasi email adalah salah satu penggunaan regex yang paling umum. Tujuan utama regex email adalah memastikan input memiliki struktur:

username @ domain . extension

Regex yang sering digunakan untuk email:

const emailRegex = /^[\w.-]+@[\w.-]+\.\w{2,}$/;Code language: JavaScript (javascript)

Contoh penggunaan:

const email = "user@example.com";
console.log(emailRegex.test(email)); // trueCode language: JavaScript (javascript)

Penjelasan pola:

  • ^[\w.-]+ → username (boleh huruf, angka, titik, dash)
  • @ → wajib ada
  • [\w.-]+ → domain
  • \.\w{2,}$ → extension minimal 2 karakter

Validasi Nomor Telepon

Format nomor telepon berbeda-beda, tetapi kita bisa membuat regex dasar yang fleksibel.

Contoh regex nomor telepon umum:

const phoneRegex = /^\+?\d{9,15}$/;Code language: JavaScript (javascript)

Maksud:

  • +? → opsional
  • \d{9,15} → panjang 9–15 digit

Contoh penggunaan:

console.log(phoneRegex.test("+628123456789")); // true
console.log(phoneRegex.test("08123456789")); // trueCode language: JavaScript (javascript)

Contoh format lebih kompleks (dengan spasi dan dash):

const phoneRegex2 = /^[+\d]?(?:[\d-.\s]{7,15})$/;Code language: JavaScript (javascript)

Validasi Password Kuat

Password yang kuat biasanya wajib memenuhi syarat berikut:

  • Minimal 8 karakter
  • Ada huruf besar
  • Ada huruf kecil
  • Ada angka
  • Ada simbol

Regex password kuat:

const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{8,}$/;Code language: JavaScript (javascript)

Contoh:

console.log(strongPasswordRegex.test("ArisDev@2025")); // trueCode language: JavaScript (javascript)

Penjelasan:

  • (?=.*[a-z]) → ada huruf kecil
  • (?=.*[A-Z]) → ada huruf besar
  • (?=.*\d) → ada angka
  • (?=.*[\W_]) → ada simbol
  • .{8,} → minimal 8 karakter

Validasi URL dan IP Address

Validasi URL

Regex sederhana untuk URL:

const urlRegex = /^(https?:\/\/)?([\w-]+\.)+[\w-]{2,}(\/.*)?$/;Code language: JavaScript (javascript)

Contoh:

console.log(urlRegex.test("https://arisdev.com")); // trueCode language: JavaScript (javascript)

Penjelasan:

  • optional http:// atau https://
  • domain + extension
  • optional path

Validasi IPv4

Format IPv4: 0-255.0-255.0-255.0-255

Regex:

const ipRegex = /^(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)){3}$/;Code language: JavaScript (javascript)

Contoh:

console.log(ipRegex.test("192.168.1.1")); // trueCode language: JavaScript (javascript)

Penjelasan:

  • 25[0-5] → 0-255
  • 2[0-4]\d → 0-249
  • 1\d{2} → 0-199
  • [1-9]?\d → 0-99

Validasi IPv6

Format IPv6: 0-ffff:0-ffff:0-ffff:0-ffff:0-ffff:0-ffff:0-ffff:0-ffff

Regex:

const ipRegex = /^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$/i;Code language: JavaScript (javascript)

Contoh: console.log(ipRegex.test(“2001:0db8:85a3:0000:0000:8a2e:0370:7334”)); // true

Penjelasan:

  • ?:[A-F0-9]{1,4} → 0-ffff
  • {7} → 7 kali
  • [A-F0-9]{1,4} → 0-ffff
  • i → case-insensitive

Contoh Penggunaan Regex di Form Validation JavaScript

Berikut contoh simulasi form sederhana:

HTML (gambaran saja)

<input id="email" type="text">
<input id="password" type="password">
<button onclick="validate()">Submit</button>
<p id="message"></p>Code language: HTML, XML (xml)

JavaScript dengan regex:

function validate() {
    const email = document.getElementById("email").value;
    const password = document.getElementById("password").value;

    const emailRegex = /^[\w.-]+@[\w.-]+\.\w{2,}$/;
    const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{8,}$/;

    if (!emailRegex.test(email)) {
        return showMessage("Email tidak valid!");
    }

    if (!passwordRegex.test(password)) {
        return showMessage("Password terlalu lemah!");
    }

    showMessage("Semua input valid!");
}

function showMessage(msg) {
    document.getElementById("message").innerText = msg;
}Code language: JavaScript (javascript)

Fitur di atas sangat sering ditemukan pada aplikasi web modern dan bisa dikembangkan menjadi validasi form yang lebih kompleks.

Regex Flags dan Opsi Tambahan

Regex di JavaScript tidak hanya tentang pola, karakter khusus, dan quantifier. Ada juga flags, yaitu opsi tambahan yang dapat mengubah perilaku pencarian pola. Flags ini sangat penting karena memengaruhi cara regex melakukan pencarian dalam string, menangani huruf besar-kecil, baris baru, karakter Unicode, dan lain-lain.

Dalam praktiknya, flags membantu membuat regex menjadi lebih fleksibel dan dapat digunakan pada berbagai kasus kompleks.

Global Flag: g

Flag g digunakan untuk mencari semua kecocokan (global match), bukan hanya kecocokan pertama.

Contoh tanpa g:

const text = "apple banana apple mango";
console.log(text.match(/apple/)); 
// output: ["apple"]Code language: JavaScript (javascript)

Hanya menemukan kecocokan pertama.

Contoh dengan g:

console.log(text.match(/apple/g));
// output: ["apple", "apple"]Code language: JavaScript (javascript)

Kapan menggunakan g?

  • Mencari semua angka di teks
  • Menghitung jumlah kemunculan kata
  • Parsing data dengan pola berulang

Case-Insensitive Flag: i

Flag i membuat pencarian tidak membedakan huruf besar dan kecil.

Contoh:

const regex = /hello/i;

console.log(regex.test("Hello")); // true
console.log(regex.test("HELLO")); // true
console.log(regex.test("hElLo")); // trueCode language: JavaScript (javascript)

Kapan digunakan?

  • Validasi email (huruf besar kecil tidak penting)
  • Mencari kata tertentu dalam paragraf
  • Mencocokkan username atau nama pengguna

Multiline Flag: m

Secara default, ^ dan $ hanya berfungsi di awal dan akhir seluruh string.

Dengan flag m, keduanya berlaku di setiap baris (multi-line mode).

Tanpa m:

const text = "Hello\nWorld";
console.log(text.match(/^World/)); 
// null (karena bukan awal string)Code language: JavaScript (javascript)

Dengan m:

console.log(text.match(/^World/m));
// ["World"]Code language: JavaScript (javascript)

Kapan dipakai?

  • Membaca file log
  • Memproses teks yang memiliki banyak baris
  • Mencocokkan pola pada setiap baris input

Sticky Flag: y

Flag y mencocokkan regex mulai dari posisi terakhir (lastIndex), bukan mencari ke seluruh string. Ini lebih ketat dibanding flag g.

Contoh:

const regex = /a/y;
const text = "aaba";

regex.lastIndex = 1;
console.log(regex.test(text)); // false (karena text[1] = a? Tidak—text[1] = a, tapi posisi ketat)Code language: JavaScript (javascript)

Flag y digunakan untuk parsing ketat, misalnya saat membaca token satu per satu.

Unicode Flag: u

Regex tanpa flag u kadang gagal saat mencocokkan karakter Unicode seperti emoji, huruf Mandarin, atau bahasa lain.

Misal:

console.log(/💖/.test("💖")); // false di beberapa kasus tanpa uCode language: JavaScript (javascript)

Dengan u:

console.log(/💖/u.test("💖")); // trueCode language: JavaScript (javascript)

Flag u sangat penting dalam aplikasi internasional.

Kombinasi Flags untuk Kasus Kompleks

Flags dapat dikombinasikan sesuai kebutuhan.

Contoh kombinasi umum:

gi — global + case-insensitive

const regex = /apple/gi;
const text = "Apple apple aPPle";

console.log(text.match(regex));
// ["Apple", "apple", "aPPle"]Code language: JavaScript (javascript)

gm — global + multiline

const text = `
    user1
    user2
    user3
    `;

console.log(text.match(/^user\d$/gm));
// ["user1", "user2", "user3"]Code language: JavaScript (javascript)

gim — lengkap

Global, case-insensitive, multiline.

const regex = /^hello/ gim;Code language: JavaScript (javascript)

Contoh kasus nyata, misalnya kamu ingin mencari seluruh kata “error” (tanpa peduli huruf besar kecil) pada setiap baris log:

const logRegex = /^error/ gim;Code language: JavaScript (javascript)

Regex tersebut akan:

  • Mencari di seluruh file .log (flag g)
  • Tidak peduli ERROR, Error, error (flag i)
  • Berlaku untuk setiap baris log (flag m)

Ringkasan Flags Regex

FlagDeskripsiKapan Dipakai
gglobal matchmencari semua kecocokan
icase-insensitivepencarian tanpa peduli kapital
mmultiline^ dan $ berlaku di setiap baris
ysticky matchparsing ketat berbasis posisi
uunicode supportemoji, huruf non-latin

Escape Character dan Special Character

Pada bagian ini kita akan membahas escape character dan special character yang menjadi fondasi penting dalam regular expression JavaScript. Banyak pemula yang kesulitan memahami bagian ini karena karakter-karakter tersebut memiliki fungsi khusus dan tidak bisa digunakan sembarangan. Dengan memahami daftar simbol penting ini, kamu akan semakin mahir membuat pattern regex yang kuat, fleksibel, dan tepat sasaran.

Escape Sequence Penting: \d, \w, \s, \D, \W, \S

Escape sequence digunakan untuk mewakili kelompok karakter tertentu tanpa menuliskannya satu per satu. Inilah yang membuat regex sangat efisien.

1. \d → digit (0–9)

Mencocokkan angka dari 0 hingga 9.

let regex = /\d+/;
console.log("Hai123".match(regex)); // ["123"]Code language: JavaScript (javascript)

2. \D → selain digit

Kebalikan dari \d.

let regex = /\D+/;
console.log("JS123".match(regex)); // ["JS"]Code language: JavaScript (javascript)

3. \w → word character (A–Z, a–z, 0–9, _)

Umumnya dipakai untuk validasi username, identifier, dan teks umum.

let regex = /\w+/;
console.log("user_01".match(regex)); // ["user_01"]Code language: JavaScript (javascript)

4. \W → selain word character

Kebalikan dari \w.

let regex = /\W+/;
console.log("Hello@2025".match(regex)); // ["@"]Code language: JavaScript (javascript)

5. \s → whitespace (spasi, tab, newline, dll.)

let regex = /\s/;
console.log("Hello World".match(regex)); // [" "]Code language: JavaScript (javascript)

6. \S → selain whitespace

let regex = /\S+/;
console.log("Hi There".match(regex)); // ["Hi"]Code language: JavaScript (javascript)

Escape sequence ini sangat sering digunakan dalam validasi input seperti email, password, nama, dan format teks lainnya.

Literal Escape: \\, \.

Beberapa karakter memiliki fungsi khusus dalam regex, sehingga jika kamu ingin menggunakannya sebagai karakter biasa (literal), kamu harus men-escape karakter tersebut.

1. \\ → mencocokkan backslash literal

Regex untuk mencari backslash harus ditulis \

let regex = /\\/;
console.log("\\folder".match(regex)); // ["\"]Code language: JavaScript (javascript)

2. \. → mencocokkan titik literal “.”

Karakter “.” dalam regex berarti “mencocokkan karakter apa saja”, jadi perlu di-escape jika ingin mencari titik sebenarnya.

let regex = /\./;
console.log("v1.2.3".match(regex)); // ["."]Code language: JavaScript (javascript)

Karakter Khusus Regex: . ^ $ * + ? ( ) [ ] { } |

Ini adalah karakter-karakter “sakral” dalam regex. Masing-masing memiliki fungsi unik:

KarakterFungsi
.mencocokkan semua karakter kecuali newline
^anchor: awal string
$anchor: akhir string
*quantifier: 0 atau lebih
+quantifier: 1 atau lebih
?quantifier opsional / lazy quantifier
()grouping & capturing
[]character class
{}quantifier jumlah
``OR / alternation

Contoh penggunaan beragam karakter khusus

1. Kleene star * dan plus +

console.log("aaa".match(/a*/)); // ["aaa"]
console.log("aaa".match(/a+/)); // ["aaa"]Code language: JavaScript (javascript)

2. Grouping ()

let regex = /(ha)+/;
console.log("hahaha".match(regex)); // ["hahaha"]Code language: JavaScript (javascript)

3. Alternation |

let regex = /kucing|anjing/;
console.log("Saya punya kucing".match(regex)); // ["kucing"]Code language: JavaScript (javascript)

4. Character class []

let regex = /[aeiou]/;
console.log("halo".match(regex)); // ["a"]Code language: JavaScript (javascript)

5. Anchors ^ dan $

let regex = /^Hello/;
console.log("Hello World".match(regex)); // ["Hello"]Code language: JavaScript (javascript)

Mengapa harus tahu karakter khusus?

Karena salah satu kesalahan terbesar pemula dalam regex adalah:

  • Menggunakan karakter khusus tanpa tahu fungsinya.
  • Mencari karakter literal tanpa di-escape.
  • Dengan memahami daftar ini, kamu bisa membuat regex jauh lebih akurat dan efisien.

Kesimpulan

Setelah mempelajari semua bagian dari tutorial lengkap ini, kamu kini telah memahami fondasi kuat tentang bagaimana regular expression JavaScript bekerja, bagaimana cara menulis pattern yang benar, hingga bagaimana melakukan pattern matching untuk kebutuhan validasi maupun manipulasi string.

Kita telah membahas cara membuat regex menggunakan literal dan constructor, memahami karakter dasar hingga meta character, menggunakan escape sequence, serta mengeksplorasi flags seperti g, i, dan m yang sangat penting untuk mengontrol perilaku pencarian. Kamu juga telah belajar berbagai metode bawaan JavaScript seperti test(), match(), replace(), search(), dan split() yang memungkinkan regex digunakan secara praktis dalam skenario nyata.

Tidak berhenti sampai di situ, kamu juga sudah mempelajari pattern matching lanjutan seperti character class, quantifier, anchors, grouping, backreference, hingga alternation |. Untuk penerapan nyata, kamu telah mempelajari cara membuat regex untuk validasi — seperti email, nomor telepon, password, URL, hingga IP address. Semua ini merupakan fondasi penting yang membuatmu siap membangun berbagai fitur berbasis teks yang lebih fleksibel dan canggih.

Dengan memahami seluruh materi dari artikel ini, kamu sudah memiliki dasar kuat untuk menggunakan regex dalam berbagai kebutuhan pengembangan web modern. Teruslah berlatih, eksplorasi pola-pola baru, dan kombinasikan regex dengan JavaScript untuk membangun aplikasi yang lebih cepat, aman, dan elegan.

1 JavaScript Dasar

2 JavaScript Menengah

Level Menengah fokus pada kemampuan yang lebih luas, seperti manipulasi DOM, event JavaScript, form validation, JSON, LocalStorage, SessionStorage, hingga asynchronous JavaScript dasar. Level ini membantu pengguna memahami bagaimana JavaScript bekerja untuk membuat website lebih interaktif dan dinamis, sangat relevan untuk tutorial dasar yang mengarahkan ke kemampuan membuat fitur web praktis.

3 JavaScript Lanjutan

4 JavaScript Mahir

5 JavaScript Ahli

Comments

Congrats, you have the opportunity to be the first commenter on this article. Have questions or suggestions? Please leave a comment to start discussion.

Leave comment

Alamat email Anda tidak akan dipublikasikan. Required fields are marked *

news-1701

yakinjp

yakinjp

rtp yakinjp

yakinjp

yakinjp

yakin jp

yakinjp id

maujp

maujp

maujp

\

sabung ayam online

sabung ayam online

SLOT MAHJONG

sabung ayam online

invoice 00026

invoice 00027

invoice 00028

invoice 00029

invoice 00030

invoice 00031

invoice 00032

invoice 00033

invoice 00034

invoice 00035

invoice 00036

invoice 00037

invoice 00038

invoice 00039

invoice 00040

invoice 00041

invoice 00042

invoice 00043

invoice 00044

invoice 00045

invoice 00046

invoice 00047

invoice 00048

invoice 00049

invoice 00050

invoice 00051

invoice 00052

invoice 00053

invoice 00054

invoice 00055

article 2000021

article 2000022

article 2000023

article 2000024

article 2000025

article 2000026

article 2000027

article 2000028

article 2000029

article 2000030

article 2000031

article 2000032

article 2000033

article 2000034

article 2000035

article 2000036

article 2000037

article 2000038

article 2000039

article 2000040

article 2000041

article 2000042

article 2000043

article 2000044

article 2000045

article 2000046

article 2000047

article 2000048

article 2000049

article 2000050

article 2000051

article 2000052

article 2000053

article 2000054

article 2000055

article 2000056

article 2000057

article 2000058

article 2000059

article 2000060

article 2000061

article 2000062

article 2000063

article 2000064

article 2000065

article 2000066

article 2000067

article 2000068

article 2000069

article 2000070

article 2000071

article 2000072

article 2000073

article 2000074

article 2000075

article 2000076

article 2000077

article 2000078

article 2000079

article 2000080

pusdataru 00021

pusdataru 00022

pusdataru 00023

pusdataru 00024

pusdataru 00025

pusdataru 00026

pusdataru 00027

pusdataru 00028

pusdataru 00029

pusdataru 00030

pusdataru 00031

pusdataru 00032

pusdataru 00033

pusdataru 00034

pusdataru 00035

pusdataru 00036

pusdataru 00037

pusdataru 00038

pusdataru 00039

pusdataru 00040

pusdataru 00041

pusdataru 00042

pusdataru 00043

pusdataru 00044

pusdataru 00045

pusdataru 00046

pusdataru 00047

pusdataru 00048

pusdataru 00049

pusdataru 00050

pusdataru 00051

pusdataru 00052

pusdataru 00053

pusdataru 00054

pusdataru 00055

pusdataru 00056

pusdataru 00057

pusdataru 00058

pusdataru 00059

pusdataru 00060

article 00000031

article 00000032

article 00000033

article 00000034

article 00000035

article 00000036

article 00000037

article 00000038

article 00000039

article 00000040

article 00000041

article 00000042

article 00000043

article 00000044

article 00000045

article 00000046

article 00000047

article 00000048

article 00000049

article 00000050

article 00000051

article 00000052

article 00000053

article 00000054

article 00000055

article 00000056

article 00000057

article 00000058

article 00000059

article 00000060

article 00000061

article 00000062

article 00000063

article 00000064

article 00000065

article 00000066

article 00000067

article 00000068

article 00000069

article 00000070

article 00000071

article 00000072

article 00000073

article 00000074

article 00000075

article 00000076

article 00000077

article 00000078

article 00000079

article 00000080

pemohonan 000001

pemohonan 000002

pemohonan 000003

pemohonan 000004

pemohonan 000005

pemohonan 000006

pemohonan 000007

pemohonan 000008

pemohonan 000009

pemohonan 000010

pemohonan 000011

pemohonan 000012

pemohonan 000013

pemohonan 000014

pemohonan 000015

pemohonan 000016

pemohonan 000017

pemohonan 000018

pemohonan 000019

pemohonan 000020

pemohonan 000021

pemohonan 000022

pemohonan 000023

pemohonan 000024

pemohonan 000025

pemohonan 000026

pemohonan 000027

pemohonan 000028

pemohonan 000029

pemohonan 000030

artikel 000000081

artikel 000000082

artikel 000000083

artikel 000000084

artikel 000000085

artikel 000000086

artikel 000000087

artikel 000000088

artikel 000000089

artikel 000000090

artikel 000000091

artikel 000000092

artikel 000000093

artikel 000000094

artikel 000000095

artikel 000000096

artikel 000000097

artikel 000000098

artikel 000000099

artikel 000000100

artikel 000000101

artikel 000000102

artikel 000000103

artikel 000000104

artikel 000000105

artikel 000000106

artikel 000000107

artikel 000000108

artikel 000000109

artikel 000000110

artikel 000000111

artikel 000000112

artikel 000000113

artikel 000000114

artikel 000000115

artikel 000000116

artikel 000000117

artikel 000000118

artikel 000000119

artikel 000000120

pengadilan 000061

pengadilan 000062

pengadilan 000063

pengadilan 000064

pengadilan 000065

pengadilan 000066

pengadilan 000067

pengadilan 000068

pengadilan 000069

pengadilan 000070

pengadilan 000071

pengadilan 000072

pengadilan 000073

pengadilan 000074

pengadilan 000075

pengadilan 000076

pengadilan 000077

pengadilan 000078

pengadilan 000079

pengadilan 000080

pengadilan 000081

pengadilan 000082

pengadilan 000083

pengadilan 000084

pengadilan 000085

pengadilan 000086

pengadilan 000087

pengadilan 000088

pengadilan 000089

pengadilan 000090

perkara 0000066

perkara 0000067

perkara 0000068

perkara 0000069

perkara 0000070

perkara 0000071

perkara 0000072

perkara 0000073

perkara 0000074

perkara 0000075

perkara 0000076

perkara 0000077

perkara 0000078

perkara 0000079

perkara 0000080

perkara 0000081

perkara 0000082

perkara 0000083

perkara 0000084

perkara 0000085

perkara 0000086

perkara 0000087

perkara 0000088

perkara 0000089

perkara 0000090

article 0000021

article 0000022

article 0000023

article 0000024

article 0000025

article 0000026

article 0000027

article 0000028

article 0000029

article 0000030

article 0000031

article 0000032

article 0000033

article 0000034

article 0000035

article 0000036

article 0000037

article 0000038

article 0000039

article 0000040

article 0000041

article 0000042

article 0000043

article 0000044

article 0000045

article 0000046

article 0000047

article 0000048

article 0000049

article 0000050

article 0000051

article 0000052

article 0000053

article 0000054

article 0000055

article 0000056

article 0000057

article 0000058

article 0000059

article 0000060

article 0000061

article 0000062

article 0000063

article 0000064

article 0000065

article 0000066

article 0000067

article 0000068

article 0000069

article 0000070

article 3000031

article 3000032

article 3000033

article 3000034

article 3000035

article 3000036

article 3000037

article 3000038

article 3000039

article 3000040

article 3000041

article 3000042

article 3000043

article 3000044

article 3000045

article 3000046

article 3000047

article 3000048

article 3000049

article 3000050

article 3000051

article 3000052

article 3000053

article 3000054

article 3000055

article 3000056

article 3000057

article 3000058

article 3000059

article 3000060

news-1701
news-1701

yakinjp

yakinjp

rtp yakinjp

yakinjp

yakinjp

yakin jp

yakinjp id

maujp

maujp

maujp

\

sabung ayam online

sabung ayam online

SLOT MAHJONG

sabung ayam online

invoice 00026

invoice 00027

invoice 00028

invoice 00029

invoice 00030

invoice 00031

invoice 00032

invoice 00033

invoice 00034

invoice 00035

invoice 00036

invoice 00037

invoice 00038

invoice 00039

invoice 00040

invoice 00041

invoice 00042

invoice 00043

invoice 00044

invoice 00045

invoice 00046

invoice 00047

invoice 00048

invoice 00049

invoice 00050

invoice 00051

invoice 00052

invoice 00053

invoice 00054

invoice 00055

article 2000021

article 2000022

article 2000023

article 2000024

article 2000025

article 2000026

article 2000027

article 2000028

article 2000029

article 2000030

article 2000031

article 2000032

article 2000033

article 2000034

article 2000035

article 2000036

article 2000037

article 2000038

article 2000039

article 2000040

article 2000041

article 2000042

article 2000043

article 2000044

article 2000045

article 2000046

article 2000047

article 2000048

article 2000049

article 2000050

article 2000051

article 2000052

article 2000053

article 2000054

article 2000055

article 2000056

article 2000057

article 2000058

article 2000059

article 2000060

article 2000061

article 2000062

article 2000063

article 2000064

article 2000065

article 2000066

article 2000067

article 2000068

article 2000069

article 2000070

article 2000071

article 2000072

article 2000073

article 2000074

article 2000075

article 2000076

article 2000077

article 2000078

article 2000079

article 2000080

pusdataru 00021

pusdataru 00022

pusdataru 00023

pusdataru 00024

pusdataru 00025

pusdataru 00026

pusdataru 00027

pusdataru 00028

pusdataru 00029

pusdataru 00030

pusdataru 00031

pusdataru 00032

pusdataru 00033

pusdataru 00034

pusdataru 00035

pusdataru 00036

pusdataru 00037

pusdataru 00038

pusdataru 00039

pusdataru 00040

pusdataru 00041

pusdataru 00042

pusdataru 00043

pusdataru 00044

pusdataru 00045

pusdataru 00046

pusdataru 00047

pusdataru 00048

pusdataru 00049

pusdataru 00050

pusdataru 00051

pusdataru 00052

pusdataru 00053

pusdataru 00054

pusdataru 00055

pusdataru 00056

pusdataru 00057

pusdataru 00058

pusdataru 00059

pusdataru 00060

article 00000031

article 00000032

article 00000033

article 00000034

article 00000035

article 00000036

article 00000037

article 00000038

article 00000039

article 00000040

article 00000041

article 00000042

article 00000043

article 00000044

article 00000045

article 00000046

article 00000047

article 00000048

article 00000049

article 00000050

article 00000051

article 00000052

article 00000053

article 00000054

article 00000055

article 00000056

article 00000057

article 00000058

article 00000059

article 00000060

article 00000061

article 00000062

article 00000063

article 00000064

article 00000065

article 00000066

article 00000067

article 00000068

article 00000069

article 00000070

article 00000071

article 00000072

article 00000073

article 00000074

article 00000075

article 00000076

article 00000077

article 00000078

article 00000079

article 00000080

pemohonan 000001

pemohonan 000002

pemohonan 000003

pemohonan 000004

pemohonan 000005

pemohonan 000006

pemohonan 000007

pemohonan 000008

pemohonan 000009

pemohonan 000010

pemohonan 000011

pemohonan 000012

pemohonan 000013

pemohonan 000014

pemohonan 000015

pemohonan 000016

pemohonan 000017

pemohonan 000018

pemohonan 000019

pemohonan 000020

pemohonan 000021

pemohonan 000022

pemohonan 000023

pemohonan 000024

pemohonan 000025

pemohonan 000026

pemohonan 000027

pemohonan 000028

pemohonan 000029

pemohonan 000030

artikel 000000081

artikel 000000082

artikel 000000083

artikel 000000084

artikel 000000085

artikel 000000086

artikel 000000087

artikel 000000088

artikel 000000089

artikel 000000090

artikel 000000091

artikel 000000092

artikel 000000093

artikel 000000094

artikel 000000095

artikel 000000096

artikel 000000097

artikel 000000098

artikel 000000099

artikel 000000100

artikel 000000101

artikel 000000102

artikel 000000103

artikel 000000104

artikel 000000105

artikel 000000106

artikel 000000107

artikel 000000108

artikel 000000109

artikel 000000110

artikel 000000111

artikel 000000112

artikel 000000113

artikel 000000114

artikel 000000115

artikel 000000116

artikel 000000117

artikel 000000118

artikel 000000119

artikel 000000120

pengadilan 000061

pengadilan 000062

pengadilan 000063

pengadilan 000064

pengadilan 000065

pengadilan 000066

pengadilan 000067

pengadilan 000068

pengadilan 000069

pengadilan 000070

pengadilan 000071

pengadilan 000072

pengadilan 000073

pengadilan 000074

pengadilan 000075

pengadilan 000076

pengadilan 000077

pengadilan 000078

pengadilan 000079

pengadilan 000080

pengadilan 000081

pengadilan 000082

pengadilan 000083

pengadilan 000084

pengadilan 000085

pengadilan 000086

pengadilan 000087

pengadilan 000088

pengadilan 000089

pengadilan 000090

perkara 0000066

perkara 0000067

perkara 0000068

perkara 0000069

perkara 0000070

perkara 0000071

perkara 0000072

perkara 0000073

perkara 0000074

perkara 0000075

perkara 0000076

perkara 0000077

perkara 0000078

perkara 0000079

perkara 0000080

perkara 0000081

perkara 0000082

perkara 0000083

perkara 0000084

perkara 0000085

perkara 0000086

perkara 0000087

perkara 0000088

perkara 0000089

perkara 0000090

article 0000021

article 0000022

article 0000023

article 0000024

article 0000025

article 0000026

article 0000027

article 0000028

article 0000029

article 0000030

article 0000031

article 0000032

article 0000033

article 0000034

article 0000035

article 0000036

article 0000037

article 0000038

article 0000039

article 0000040

article 0000041

article 0000042

article 0000043

article 0000044

article 0000045

article 0000046

article 0000047

article 0000048

article 0000049

article 0000050

article 0000051

article 0000052

article 0000053

article 0000054

article 0000055

article 0000056

article 0000057

article 0000058

article 0000059

article 0000060

article 0000061

article 0000062

article 0000063

article 0000064

article 0000065

article 0000066

article 0000067

article 0000068

article 0000069

article 0000070

article 3000031

article 3000032

article 3000033

article 3000034

article 3000035

article 3000036

article 3000037

article 3000038

article 3000039

article 3000040

article 3000041

article 3000042

article 3000043

article 3000044

article 3000045

article 3000046

article 3000047

article 3000048

article 3000049

article 3000050

article 3000051

article 3000052

article 3000053

article 3000054

article 3000055

article 3000056

article 3000057

article 3000058

article 3000059

article 3000060

news-1701
content-1701

sabung ayam online

yakinjp

yakinjp

rtp yakinjp

slot thailand

yakinjp

yakinjp

yakin jp

yakinjp id

maujp

maujp

maujp

maujp

slot mahjong

SGP Pools

slot mahjong

sabung ayam online

slot mahjong

SLOT THAILAND

article 888000081

article 888000082

article 888000083

article 888000084

article 888000085

article 888000086

article 888000087

article 888000088

article 888000089

article 888000090

article 888000091

article 888000092

article 888000093

article 888000094

article 888000095

article 888000096

article 888000097

article 888000098

article 888000099

article 888000100

cuaca 898100126

cuaca 898100127

cuaca 898100128

cuaca 898100129

cuaca 898100130

cuaca 898100131

cuaca 898100132

cuaca 898100133

cuaca 898100134

cuaca 898100135

cuaca 898100136

cuaca 898100137

cuaca 898100138

cuaca 898100139

cuaca 898100140

cuaca 898100141

cuaca 898100142

cuaca 898100143

cuaca 898100144

cuaca 898100145

cuaca 898100146

cuaca 898100147

cuaca 898100148

cuaca 898100149

cuaca 898100150

cuaca 898100151

cuaca 898100152

cuaca 898100153

cuaca 898100154

cuaca 898100155

cuaca 898100156

cuaca 898100157

cuaca 898100158

cuaca 898100159

cuaca 898100160

cuaca 898100161

cuaca 898100162

cuaca 898100163

cuaca 898100164

cuaca 898100165

cuaca 898100166

cuaca 898100167

cuaca 898100168

cuaca 898100169

cuaca 898100170

cuaca 898100171

cuaca 898100172

cuaca 898100173

cuaca 898100174

cuaca 898100175

article 710000151

article 710000152

article 710000153

article 710000154

article 710000155

article 710000156

article 710000157

article 710000158

article 710000159

article 710000160

article 710000161

article 710000162

article 710000163

article 710000164

article 710000165

article 710000166

article 710000167

article 710000168

article 710000169

article 710000170

article 710000171

article 710000172

article 710000173

article 710000174

article 710000175

article 710000176

article 710000177

article 710000178

article 710000179

article 710000180

article 710000181

article 710000182

article 710000183

article 710000184

article 710000185

article 710000186

article 710000187

article 710000188

article 710000189

article 710000190

article 710000191

article 710000192

article 710000193

article 710000194

article 710000195

article 710000196

article 710000197

article 710000198

article 710000199

article 710000200

psda 438000036

psda 438000037

psda 438000038

psda 438000039

psda 438000040

psda 438000041

psda 438000042

psda 438000043

psda 438000044

psda 438000045

psda 438000046

psda 438000047

psda 438000048

psda 438000049

psda 438000050

psda 438000051

psda 438000052

psda 438000053

psda 438000054

psda 438000055

psda 438000056

psda 438000057

psda 438000058

psda 438000059

psda 438000060

psda 438000061

psda 438000062

psda 438000063

psda 438000064

psda 438000065

psda 438000066

psda 438000067

psda 438000068

psda 438000069

psda 438000070

psda 438000071

psda 438000072

psda 438000073

psda 438000074

psda 438000075

psda 438000076

psda 438000077

psda 438000078

psda 438000079

psda 438000080

psda 438000081

psda 438000082

psda 438000083

psda 438000084

psda 438000085

psda 438000086

psda 438000087

psda 438000088

psda 438000089

psda 438000090

psda 438000091

psda 438000092

psda 438000093

psda 438000094

psda 438000095

psda 438000096

psda 438000097

psda 438000098

psda 438000099

psda 438000100

psda 438000101

psda 438000102

psda 438000103

psda 438000104

psda 438000105

psda 438000106

psda 438000107

psda 438000108

psda 438000109

content-1701