คำจำกัดความ
Regular Expression คืออะไร?
Regular Expression (Regex) คือรูปแบบ (pattern) ที่ใช้ค้นหาและจับคู่ข้อความ เป็นเครื่องมือสำคัญสำหรับนักพัฒนาในการตรวจสอบ ค้นหา และแทนที่ข้อความ
Regex ถูกใช้ในเกือบทุกภาษาโปรแกรม เช่น JavaScript, Python, Java, PHP สำหรับ validation, parsing, และ text processing
Flags
ตัวเลือก Regex Flags
Regex flags เป็นตัวเลือกที่ควบคุมพฤติกรรมของการค้นหา สามารถใช้ร่วมกันได้หลาย flag พร้อมกัน
- g (global) — ค้นหาทุกตำแหน่ง ไม่หยุดที่ตัวแรก
- i (case-insensitive) — ไม่สนตัวพิมพ์เล็ก-ใหญ่
- m (multiline) — ให้ ^ และ $ ทำงานกับแต่ละบรรทัด
- s (dotAll) — ให้ . จับคู่กับ newline ด้วย
ตารางสรุป pattern ที่ใช้บ่อยใน Regular Expression พร้อมความหมาย
- \d — ตัวเลข (0-9)
- \w — ตัวอักษร ตัวเลข หรือ underscore
- \s — ช่องว่าง (space, tab, newline)
- . — ตัวอักษรใดก็ได้ (ยกเว้น newline)
- ^ — จุดเริ่มต้นบรรทัด
- $ — จุดสิ้นสุดบรรทัด
- * — ซ้ำ 0 ครั้งขึ้นไป
- + — ซ้ำ 1 ครั้งขึ้นไป
- ? — ซ้ำ 0 หรือ 1 ครั้ง
- {'{'} n,m {'}'} — ซ้ำ n ถึง m ครั้ง
เคล็ดลับ
เคล็ดลับการใช้ Regex
- เริ่มจาก pattern ง่ายๆ แล้วค่อยเพิ่มความซับซ้อน
- ใช้ flag g เสมอถ้าต้องการค้นหาทุกตำแหน่ง
- ใช้ \b เพื่อจับคู่เฉพาะคำเต็มคำ ป้องกันการจับคู่บางส่วนของคำ
- หลีกเลี่ยง nested quantifiers เช่น (a+)+ เพราะอาจทำให้ทำงานช้ามาก
- ใช้ capture group () เพื่อดึงข้อมูลบางส่วนออกมาจาก match
กรณีใช้งาน
กรณีใช้งานจริง
- Validate อีเมลและเบอร์โทรในฟอร์มสมัครสมาชิกก่อนส่งข้อมูลไปยัง backend
- ดึงตัวเลขราคาออกจากข้อความ เช่น แยกจำนวนเงินจาก invoice หรือใบเสร็จ
- ค้นหาและแทนที่ URL ทั้งหมดในบทความ เพื่อเปลี่ยน HTTP เป็น HTTPS พร้อมกัน
- Parse log file เพื่อดึง timestamp, error code และ message ออกมาวิเคราะห์
- ตรวจสอบรูปแบบเลขบัตรประชาชน 13 หลักว่าถูกต้องตาม pattern ก่อนบันทึกลงฐานข้อมูล
หลีกเลี่ยง
ข้อผิดพลาดที่พบบ่อย
- ลืม escape อักขระพิเศษ เช่น . * + ? ทำให้จับคู่ผิด ต้องใส่ \ นำหน้าเมื่อต้องการตัวอักษรจริง
- ใช้ .* แบบ greedy โดยไม่จำเป็น ทำให้ match กินข้อมูลมากเกินไป ควรใช้ .*? แทน
- เขียน regex ยาวเกินไปในบรรทัดเดียวโดยไม่ใช้ named group ทำให้อ่านและ maintain ยาก
- ไม่ทดสอบกับ edge case เช่น ข้อความว่าง อักขระพิเศษ หรือ Unicode ภาษาไทย ทำให้ regex พังในงานจริง
เปรียบเทียบ
เปรียบเทียบกับเครื่องมืออื่น
Regex Tester ของเราใช้งานง่ายผ่านเบราว์เซอร์ พร้อม pattern สำเร็จรูปสำหรับเบอร์โทรไทยและเลขบัตรประชาชน ต่างจาก Regex101 ที่เน้นรายละเอียดทางเทคนิคแต่ไม่มี preset ภาษาไทย
เมื่อเทียบกับการทดสอบ regex ใน IDE หรือ terminal ที่ต้องเขียนโค้ดทดสอบเอง เครื่องมือนี้แสดง match แบบ real-time พร้อม highlight ทำให้เห็นผลทันทีโดยไม่ต้อง compile หรือ run script
เครื่องมือนี้ใช้ JavaScript RegExp engine ผลลัพธ์อาจแตกต่างจาก regex engine ในภาษาอื่น ควรทดสอบในภาษาที่จะใช้งานจริงด้วย