ทดสอบ Regex
ทดสอบ regular expression พร้อมไฮไลต์ผลลัพธ์แบบเรียลไทม์ capture groups และพรีวิวการแทนที่ข้อความ — ทำงานทั้งหมดในเบราว์เซอร์ของคุณ
เอนจิน: regular expression ของ JavaScript (ECMAScript) ที่เบราว์เซอร์ของคุณรัน พฤติกรรมอาจต่างจาก PCRE, Python, Go, Java หรือ .NET
อธิบายรูปแบบ
กรอกรูปแบบเพื่อดูคำอธิบายทีละโทเค็น
คลังรูปแบบ
คลิกรูปแบบเพื่อโหลด (พร้อมข้อความตัวอย่าง) เข้าตัวทดสอบ
หนึ่งกรณีต่อบรรทัด ขึ้นต้นด้วย "+ " หากรูปแบบต้องตรงกัน หรือ "- " หากต้องไม่ตรงกัน (ละเว้นแฟลก g และ y ที่นี่)
สร้างโค้ด
กรอกรูปแบบเพื่อสร้างโค้ด
รูปแบบถูกคัดลอกตามที่เขียน (ปรับเฉพาะกลุ่มที่มีชื่อ แฟลก และโทเค็นการแทนที่) โปรดตรวจสอบการรองรับ lookbehind, backreference และ Unicode ในเอนจินปลายทาง
- \d — ตัวเลขใดๆ (0–9)
- \w — ตัวอักษรคำใดๆ (ตัวอักษร ตัวเลข หรือขีดล่าง)
- \s — ช่องว่างใดๆ
- . — ตัวอักษรใดๆ ยกเว้นตัวขึ้นบรรทัดใหม่
- ^ — จุดเริ่มต้นของข้อความ (หรือของแต่ละบรรทัด เมื่อเปิด flag multiline)
- $ — จุดสิ้นสุดของข้อความ (หรือของแต่ละบรรทัด เมื่อเปิด flag multiline)
- * — ซ้ำ token ก่อนหน้าศูนย์ครั้งหรือมากกว่า
- + — ซ้ำ token ก่อนหน้าหนึ่งครั้งหรือมากกว่า
- ? — ซ้ำ token ก่อนหน้าศูนย์ครั้งหรือหนึ่งครั้ง
- {n,m} — ซ้ำระหว่าง n ถึง m ครั้ง
- (...) — กลุ่มจับค่า (capturing group), (?:...) — กลุ่มไม่จับค่า (non-capturing group)
- \b — ขอบเขตของคำ, | — เลือกอย่างใดอย่างหนึ่ง (OR)
การทดสอบ regex ในเบราว์เซอร์ทำงานอย่างไรกันแน่?
regular expression คือภาษารูปแบบสั้นๆ ที่ใช้จับคู่ข้อความ ตั้งแต่ "ข้อความนี้ดูเหมือนอีเมลไหม" ไปจนถึง "หาเบอร์โทรศัพท์ทุกเบอร์ในเอกสารนี้" หรือ "ลบแท็ก HTML ออกจากข้อความนี้" ปัญหาคือไวยากรณ์ของ regex นั้นขึ้นชื่อเรื่องความผิดพลาดเล็กๆ น้อยๆ ที่แอบซ่อนอยู่ได้ง่ายมาก ไม่ว่าจะเป็น `.` ที่ควร escape แต่ลืมใส่ `*` แบบ greedy ที่กินข้อความมากกว่าที่ตั้งใจ หรือ group ที่จับค่าไม่ตรงกับที่คาดไว้ การเขียน pattern แบบมองไม่เห็นผลแล้วมารู้ว่ามันผิดตอนที่มันรันอยู่กับข้อมูลจริงบน production แล้ว ไม่ใช่วิธีเรียนรู้ที่ดีนัก
เครื่องมือนี้ทำงานบนเอนจิน `RegExp` ในตัวของ JavaScript เอง โดยรันอยู่ในเบราว์เซอร์ของคุณโดยตรงทันทีที่คุณพิมพ์ ไม่มีเซิร์ฟเวอร์เข้ามาเกี่ยวข้องเลย ดังนั้นข้อความที่คุณใช้ทดสอบ ไม่ว่าจะเป็นข้อมูลผู้ใช้จริง log line หรืออะไรก็ตามที่คุณไม่อยากวางลงในบริการของบุคคลที่สาม จะไม่มีวันออกจากเครื่องของคุณ และเพราะมันคือเอนจินตัวเดียวกันเป๊ะกับที่โค้ด JavaScript ของคุณจะใช้ตอนรันจริง สิ่งที่คุณเห็นในหน้านี้ ไม่ว่าจะเป็นตัวอักษรไหนที่ตรงกัน quantifier แบบ greedy ทำงานอย่างไร หรือ group จับค่าอะไรมาได้บ้าง ก็คือผลลัพธ์เดียวกันเป๊ะกับตอนรันจริง ไม่ใช่ค่าประมาณจาก regex สายพันธุ์อื่น
พิมพ์ pattern แล้วเปิด flag ที่ต้องการ: `g` เพื่อค้นหาทุกผลลัพธ์ที่ตรงกันแทนที่จะหยุดที่ตัวแรก `i` เพื่อไม่สนตัวพิมพ์เล็ก-ใหญ่ `m` เพื่อให้ `^` และ `$` ตรงกับจุดเริ่มต้น/สิ้นสุดของแต่ละบรรทัดแทนที่จะเป็นทั้งข้อความ และ `s` เพื่อให้ `.` จับคู่กับตัวขึ้นบรรทัดใหม่ได้ด้วย ทุกผลลัพธ์ที่ตรงกันในข้อความทดสอบของคุณจะถูกไฮไลต์แบบเรียลไทม์ และแต่ละรายการจะถูกแจกแจงด้านล่างให้เห็นข้อความที่จับคู่ได้เต็มๆ ตำแหน่งของมัน และ capture group ต่างๆ รวมถึง named group อย่าง `(?<year>\d{4})` ด้วย ทำให้คุณเห็นได้ทันทีว่า group ที่ตั้งใจจะดึงออกมานั้นจับค่าที่ต้องการจริงหรือไม่ ส่วนแทนที่ข้อความจะแสดงผลลัพธ์ที่ `String.replace()` จะสร้างขึ้นจริงเมื่อใช้ pattern และข้อความแทนที่ของคุณ รวมถึงการอ้างอิงกลับไปยัง group อย่าง `$1` หรือ `$<year>` ด้วย
แผงตารางอ้างอิงฉบับย่อด้านล่างครอบคลุม token ที่คนมักลืมบ่อยที่สุดระหว่างทำงาน เช่น ความต่างระหว่าง `*` กับ `+`, non-capturing group `(?:...)` มีไว้ทำอะไร, `\b` ใช้กำหนดขอบเขตของคำอย่างไร โดยไม่ต้องออกจากหน้านี้ไปค้นหาที่อื่น เมื่อได้ pattern ที่ทำงานตามที่ต้องการกับข้อมูลทดสอบจริงแล้ว ก็พร้อมนำไปใส่ในโค้ดของคุณได้เลย และหากคุณต้องการตรวจสอบหรือจัดรูปแบบข้อมูลรอบข้างเพิ่มเติม เครื่องมือ JSON Formatter & Validator และ Text Diff Checker ก็เป็นตัวช่วยที่เข้ากันได้ดี
คำถามที่พบบ่อย
รูปแบบ regex ที่ผิดทำให้หน้าเว็บค้างไหม
ไม่ การจับคู่ทำงานใน Web Worker แยกต่างหากพร้อมกำหนดเวลาสูงสุดที่เข้มงวด แม้รูปแบบที่เกิด catastrophic backtracking ก็ทำให้แท็บของคุณค้างไม่ได้
แสดงกลุ่มจับแบบมีชื่อและแบบมีหมายเลขไหม
แสดง ทุกรายการที่ตรงกันจะแสดงกลุ่มที่มีหมายเลขและกลุ่มที่มีชื่อ เช่น (?<year>\d{4})
ดูตัวอย่างการแทนที่ก่อนนำไปใช้ในโค้ดได้ไหม
ได้ แผงแทนที่แสดงสิ่งที่ String.replace() จะให้ผลลัพธ์ออกมาอย่างตรงจริง รวมถึง backreference ของกลุ่ม