Regex Tester

Uji ekspresi reguler terhadap string dan lihat semua kecocokan yang disorot

Coba contoh

Pola

//g

String uji

Berjalan lokal ยท Aman untuk menempel rahasia

Apa Itu Ekspresi Reguler?

Ekspresi reguler (regex atau regexp) adalah urutan karakter yang mendefinisikan pola pencarian. Regex tester memungkinkan kamu menulis pola, menjalankannya terhadap teks contoh, dan melihat semua kecocokan disorot secara langsung. Konsep ini bermula dari karya matematikawan Stephen Kleene tentang bahasa reguler pada 1950-an, dan Ken Thompson membangun mesin regex pertama ke dalam editor teks QED pada tahun 1968.

Mesin regex membaca pola dari kiri ke kanan, mengonsumsi karakter input saat mencoba mencocokkan. Mesin menggunakan backtracking ketika kecocokan parsial gagal: mesin mundur dan mencoba jalur alternatif melalui pola. Beberapa mesin (seperti RE2 yang digunakan di Go) menghindari backtracking sepenuhnya dengan mengonversi pola ke deterministic finite automata (DFA), yang menjamin pencocokan waktu linear dengan konsekuensi tidak mendukung fitur seperti back-reference.

Sintaks regex distandarisasi secara longgar. PCRE (Perl Compatible Regular Expressions) adalah varian yang paling umum, didukung oleh PHP, modul re Python, dan JavaScript dengan perbedaan kecil. POSIX mendefinisikan sintaks yang lebih terbatas yang digunakan oleh grep dan sed. Perbedaan ini penting saat memindahkan pola antar bahasa: lookahead yang bekerja di JavaScript mungkin tidak dapat dikompilasi sama sekali di mesin RE2 milik Go.

Mengapa Menggunakan Regex Tester Online?

Menulis regex dalam file kode berarti menyimpan, menjalankan, dan memeriksa output setiap kali kamu menyesuaikan pola. Regex tester berbasis browser menutup siklus umpan balik itu menjadi nol: kamu mengetik, kamu langsung melihat kecocokan.

โšก
Penyorotan kecocokan secara langsung
Setiap penekanan tombol memperbarui hasil kecocokan secara instan. Kamu melihat bagian teks mana yang cocok, capture group mana yang terisi, dan tepat di mana setiap kecocokan dimulai dan berakhir. Tidak ada siklus kompilasi-jalankan-debug.
๐Ÿ”’
Pemrosesan yang mengutamakan privasi
Pencocokan pola berjalan di browser menggunakan mesin JavaScript RegExp. Tidak ada teks atau pola yang dikirim ke server. Ini penting saat menguji terhadap file log, data pelanggan, atau respons API yang mengandung informasi sensitif.
๐Ÿ”
Inspeksi kecocokan secara visual
Kecocokan disorot langsung di dalam teks beserta posisi dan nilai capture group yang ditampilkan. Melihat kecocokan secara visual memudahkan pendeteksian kesalahan off-by-one pada quantifier atau jangkar yang hilang.
๐ŸŒ
Tidak perlu login atau instalasi
Bekerja di perangkat apa pun dengan browser modern. Tidak perlu akun, ekstensi, atau plugin IDE. Buka halaman, tempel pola dan teks, lalu mulai pengujian.

Kasus Penggunaan Regex Tester

Validasi Input Frontend
Buat dan verifikasi pola untuk field email, nomor telepon, atau kartu kredit sebelum menanamkannya dalam atribut HTML5 pattern atau logika validasi JavaScript.
Parsing Log Backend
Tulis pola regex yang mengekstrak timestamp, kode kesalahan, atau alamat IP dari log aplikasi. Uji terhadap sampel log nyata untuk memastikan pola menangkap grup yang tepat.
DevOps & Infrastruktur
Debug regex yang digunakan dalam blok lokasi Nginx, aturan rewrite Apache, atau aturan alerting Prometheus. Pola yang salah dalam konfigurasi server dapat merusak routing atau melewatkan alert sama sekali.
QA & Otomasi Pengujian
Validasi bahwa isi respons atau output HTML cocok dengan pola yang diharapkan dalam assertion pengujian end-to-end. Uji regex di sini terlebih dahulu sebelum memasukkannya ke dalam rangkaian pengujian.
Pipeline Ekstraksi Data
Buat prototipe pola untuk mengekstrak field terstruktur dari teks tidak terstruktur: scraping harga produk, parsing kasus tepi CSV, atau mengambil metadata dari header email.
Belajar Ekspresi Reguler
Bereksperimen dengan metakarakter, quantifier, dan grup terhadap string contoh. Umpan balik visual yang langsung membuat sintaks regex lebih mudah dipelajari dibandingkan hanya membaca dokumentasi.

Referensi Cepat Sintaks Regex

Tabel di bawah mencakup token regex yang paling sering digunakan. Token-token ini bekerja di JavaScript, Python, Go, PHP, dan sebagian besar mesin yang kompatibel dengan PCRE. Ekstensi khusus bahasa (seperti conditional pattern Python atau named group JavaScript dengan sintaks \k) dicatat di bagian contoh kode.

PolaNamaDeskripsi
.Any characterMatches any single character except newline (unless s flag is set)
\dDigitMatches [0-9]
\wWord characterMatches [a-zA-Z0-9_]
\sWhitespaceMatches space, tab, newline, carriage return, form feed
\bWord boundaryMatches the position between a word character and a non-word character
^Start of string/lineMatches the start of the input; with m flag, matches start of each line
$End of string/lineMatches the end of the input; with m flag, matches end of each line
*Zero or moreMatches the preceding token 0 or more times (greedy)
+One or moreMatches the preceding token 1 or more times (greedy)
?OptionalMatches the preceding token 0 or 1 time
{n,m}Quantifier rangeMatches the preceding token between n and m times
()Capturing groupGroups tokens and captures the matched text for back-references
(?:)Non-capturing groupGroups tokens without capturing the matched text
(?=)Positive lookaheadMatches a position followed by the given pattern, without consuming it
(?<=)Positive lookbehindMatches a position preceded by the given pattern, without consuming it
[abc]Character classMatches any one of the characters inside the brackets
[^abc]Negated classMatches any character not inside the brackets
|AlternationMatches the expression before or after the pipe

Penjelasan Flag Regex

Flag (disebut juga modifier) mengubah cara mesin memproses pola. Di JavaScript, kamu menambahkannya setelah garis miring penutup: /pattern/gi. Di Python, kamu meneruskannya sebagai argumen kedua: re.findall(pattern, text, re.IGNORECASE | re.MULTILINE). Tidak semua flag tersedia di setiap bahasa.

FlagNamaPerilaku
gGlobalFind all matches, not just the first one
iCase-insensitiveLetters match both uppercase and lowercase
mMultiline^ and $ match start/end of each line, not just the whole string
sDot-all. matches newline characters as well
uUnicodeTreat the pattern and subject as a Unicode string; enables \u{FFFF} syntax
yStickyMatches only from the lastIndex position in the target string

Contoh Kode

Contoh regex yang berfungsi dalam JavaScript, Python, Go, dan baris perintah. Setiap contoh menunjukkan konstruksi pola, ekstraksi kecocokan, dan output.

JavaScript
// Match all email addresses in a string
const text = 'Contact us at support@example.com or sales@example.com'
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g

const matches = text.matchAll(emailRegex)
for (const match of matches) {
  console.log(match[0], 'at index', match.index)
}
// โ†’ "support@example.com" at index 14
// โ†’ "sales@example.com" at index 37

// Named capture groups (ES2018+)
const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
const result = '2026-03-30'.match(dateRegex)
console.log(result.groups)
// โ†’ { year: "2026", month: "03", day: "30" }

// Replace with a callback
'hello world'.replace(/\b\w/g, c => c.toUpperCase())
// โ†’ "Hello World"
Python
import re

# Find all IPv4 addresses
text = 'Server 192.168.1.1 responded, fallback to 10.0.0.255'
pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'

matches = re.findall(pattern, text)
print(matches)  # โ†’ ['192.168.1.1', '10.0.0.255']

# Named groups and match objects
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Released on 2026-03-30')
if m:
    print(m.group('year'))   # โ†’ '2026'
    print(m.group('month'))  # โ†’ '03'

# Compile for repeated use (faster in loops)
compiled = re.compile(r'\b[A-Z][a-z]+\b')
words = compiled.findall('Hello World Foo bar')
print(words)  # โ†’ ['Hello', 'World', 'Foo']
Go
package main

import (
	"fmt"
	"regexp"
)

func main() {
	// Find all matches
	re := regexp.MustCompile(`\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b`)
	text := "Contact support@example.com or sales@example.com"
	matches := re.FindAllString(text, -1)
	fmt.Println(matches)
	// โ†’ [support@example.com sales@example.com]

	// Named capture groups
	dateRe := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`)
	match := dateRe.FindStringSubmatch("2026-03-30")
	for i, name := range dateRe.SubexpNames() {
		if name != "" {
			fmt.Printf("%s: %s\n", name, match[i])
		}
	}
	// โ†’ year: 2026
	// โ†’ month: 03
	// โ†’ day: 30

	// Replace with a function
	result := re.ReplaceAllStringFunc(text, func(s string) string {
		return "[REDACTED]"
	})
	fmt.Println(result)
	// โ†’ Contact [REDACTED] or [REDACTED]
}
CLI (grep / sed)
# Find lines matching an IP address pattern
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' access.log

# Extract email addresses from a file
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt

# Replace dates from YYYY-MM-DD to DD/MM/YYYY using sed
echo "2026-03-30" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
# โ†’ 30/03/2026

# Count matches per file in a directory
grep -rcE 'TODO|FIXME|HACK' src/
# โ†’ src/main.js:3
# โ†’ src/utils.js:1

Pertanyaan yang Sering Diajukan

Apa perbedaan antara regex dan pola glob?
Pola glob (seperti *.txt atau src/**/*.js) adalah sintaks wildcard yang disederhanakan untuk pencocokan jalur file di shell dan build tool. Pola ini mendukung * (karakter apa pun), ? (satu karakter), dan [] (kelas karakter) tetapi tidak memiliki quantifier, grup, lookahead, dan alternation. Regex jauh lebih ekspresif dan beroperasi pada teks sembarang, bukan hanya jalur file. Pola glob *.json kira-kira setara dengan regex ^.*\.json$.
Bagaimana cara mencocokkan titik atau kurung siku secara literal dalam regex?
Awali karakter dengan backslash: \. mencocokkan titik literal, \[ mencocokkan kurung siku literal. Di dalam kelas karakter [], titik sudah bersifat literal dan tidak perlu di-escape. Kesalahan umum adalah menulis 192.168.1.1 tanpa meng-escape titik, yang akan cocok dengan 192x168y1z1 karena . berarti "karakter apa pun."
Apakah data uji saya dikirim ke server?
Tidak. Alat ini menjalankan pencocokan regex sepenuhnya di browser menggunakan mesin JavaScript RegExp. Tidak ada permintaan jaringan yang dibuat dengan teks atau pola kamu. Kamu dapat memverifikasi hal ini dengan membuka tab Network di DevTools browser saat menggunakan alat ini.
Mengapa regex saya bekerja di JavaScript tetapi gagal di Python?
JavaScript dan Python menggunakan mesin regex yang berbeda dengan kumpulan fitur yang sedikit berbeda. JavaScript mendukung \d, lookahead (?=), dan lookbehind (?<=) sejak ES2018, tetapi tidak mendukung conditional pattern, atomic group, atau possessive quantifier. Modul re Python tidak mendukung kelas properti Unicode \p{} (gunakan modul regex pihak ketiga sebagai gantinya). Selalu uji di mesin bahasa target atau konsultasikan dokumentasi regex bahasa tersebut.
Apa yang menyebabkan catastrophic backtracking dalam regex?
Catastrophic backtracking terjadi ketika pola memiliki quantifier bersarang yang menghasilkan jumlah jalur pencocokan yang eksponensial. Contoh klasiknya adalah (a+)+ yang diterapkan pada string berisi karakter a yang diikuti oleh karakter yang tidak cocok. Mesin mencoba setiap cara yang mungkin untuk membagi karakter a antara grup dalam dan luar sebelum gagal. Perbaiki ini dengan menggunakan atomic group (?>), possessive quantifier a++, atau menulis ulang pola untuk menghindari pengulangan yang ambigu.
Bisakah saya menggunakan regex untuk mem-parse HTML?
Regex dapat mengekstrak nilai sederhana dari fragmen HTML, seperti mengambil href dari satu tag <a>. Untuk parsing HTML penuh, gunakan parser yang tepat (DOMParser di JavaScript, BeautifulSoup di Python, atau html/template di Go). HTML adalah tata bahasa bebas konteks, sedangkan regex menangani tata bahasa reguler. Tag bersarang, atribut opsional, dan elemen self-closing menciptakan pola yang tidak dapat dicocokkan oleh regex secara andal.
Apa perbedaan antara quantifier greedy dan lazy?
Quantifier greedy (* atau +) mencocokkan sebanyak mungkin karakter, lalu backtrack jika sisa pola gagal. Quantifier lazy (*? atau +?) mencocokkan sesedikit mungkin karakter, hanya meluas jika diperlukan. Untuk input <b>one</b><b>two</b>, pola greedy <b>.*</b> mencocokkan seluruh string dari <b> pertama hingga </b> terakhir, sedangkan pola lazy <b>.*?</b> mencocokkan <b>one</b> dan <b>two</b> secara terpisah.