Regular Expression คืออะไร?
Regular Expression (Regex) คือรูปแบบ (pattern) ที่ใช้ค้นหาและจับคู่ข้อความ เป็นเครื่องมือสำคัญสำหรับนักพัฒนาในการตรวจสอบ ค้นหา และแทนที่ข้อความ
Regex ถูกใช้ในเกือบทุกภาษาโปรแกรม เช่น JavaScript, Python, Java, PHP สำหรับ validation, parsing, และ text processing
ตัวเลือก Regex Flags
Regex flags เป็นตัวเลือกที่ควบคุมพฤติกรรมของการค้นหา สามารถใช้ร่วมกันได้หลาย flag พร้อมกัน
g (global) — ค้นหาทุกตำแหน่ง ไม่หยุดที่ตัวแรก
i (case-insensitive) — ไม่สนตัวพิมพ์เล็ก-ใหญ่
m (multiline) — ให้ ^ และ $ ทำงานกับแต่ละบรรทัด
s (dotAll) — ให้ . จับคู่กับ newline ด้วย
สูตรลัด Regex
ตารางสรุป pattern ที่ใช้บ่อยใน Regular Expression พร้อมความหมาย
| Pattern | ความหมาย |
|---|
. | ตรงกับอักขระใดก็ได้ (ยกเว้น newline) |
* | ซ้ำ 0 ครั้งขึ้นไป |
+ | ซ้ำ 1 ครั้งขึ้นไป |
? | ซ้ำ 0 หรือ 1 ครั้ง |
{n} | ซ้ำ n ครั้งพอดี |
{n,m} | ซ้ำ n ถึง m ครั้ง |
^ | ต้นบรรทัด / ต้นสตริง |
$ | ท้ายบรรทัด / ท้ายสตริง |
\d | ตัวเลข [0-9] |
\w | ตัวอักษร ตัวเลข ขีดล่าง |
\s | ช่องว่าง, tab, newline |
[abc] | ตรงกับ a, b หรือ c |
[^abc] | ไม่ตรงกับ a, b, c |
(abc) | Capture group |
a|b | ตรงกับ a หรือ b |
\b | ขอบของคำ (word boundary) |
เคล็ดลับการใช้ Regex
- เริ่มจาก pattern ง่ายๆ แล้วค่อยเพิ่มความซับซ้อน
- ใช้ flag g เสมอถ้าต้องการค้นหาทุกตำแหน่ง
- ใช้ \b เพื่อจับคู่เฉพาะคำเต็มคำ ป้องกันการจับคู่บางส่วนของคำ
- หลีกเลี่ยง nested quantifiers เช่น (a+)+ เพราะอาจทำให้ทำงานช้ามาก
- ใช้ capture group () เพื่อดึงข้อมูลบางส่วนออกมาจาก match
กรณีใช้งานจริง
tools.regextester.info.useCases.content
Validate อีเมลและเบอร์โทรในฟอร์มสมัครสมาชิกก่อนส่งข้อมูลไปยัง backend
ดึงตัวเลขราคาออกจากข้อความ เช่น แยกจำนวนเงินจาก invoice หรือใบเสร็จ
ค้นหาและแทนที่ URL ทั้งหมดในบทความ เพื่อเปลี่ยน HTTP เป็น HTTPS พร้อมกัน
Parse log file เพื่อดึง timestamp, error code และ message ออกมาวิเคราะห์
ตรวจสอบรูปแบบเลขบัตรประชาชน 13 หลักว่าถูกต้องตาม pattern ก่อนบันทึกลงฐานข้อมูล
เคล็ดลับการใช้ Regex
tools.regextester.info.tips.content
เริ่มจาก pattern ง่ายๆ แล้วค่อยเพิ่มความซับซ้อน
ใช้ flag g เสมอถ้าต้องการค้นหาทุกตำแหน่ง
ใช้ \b เพื่อจับคู่เฉพาะคำเต็มคำ ป้องกันการจับคู่บางส่วนของคำ
หลีกเลี่ยง nested quantifiers เช่น (a+)+ เพราะอาจทำให้ทำงานช้ามาก
ใช้ capture group () เพื่อดึงข้อมูลบางส่วนออกมาจาก match
ข้อผิดพลาดที่พบบ่อย
tools.regextester.info.commonMistakes.content
ลืม 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 ซึ่งเป็น engine เดียวกับที่ใช้ในเว็บเบราว์เซอร์ทุกตัว เหมาะสำหรับทดสอบ regex ที่จะใช้ใน JavaScript, TypeScript และ Node.js
ได้ส่วนใหญ่ เพราะ regex syntax คล้ายกันในหลายภาษา แต่บางฟีเจอร์ เช่น lookbehind อาจมีความแตกต่างกัน ควรทดสอบในภาษาที่จะใช้จริงด้วย
Flag g (global) ทำให้ regex ค้นหาทุกตำแหน่งที่ตรงกัน ถ้าไม่ใส่จะค้นหาแค่ตำแหน่งแรกที่ตรงกัน
Regex ที่มี catastrophic backtracking อาจทำให้เบราว์เซอร์ช้าได้ หลีกเลี่ยงการใช้ nested quantifiers เช่น (a+)+ กับข้อความยาวๆ
ไม่ ทุกอย่างประมวลผลใน browser ของคุณ ไม่มีข้อมูลถูกส่งออกไป
Lookahead (?=...) ตรวจสอบว่าด้านหลังมี pattern ที่กำหนดโดยไม่รวมใน match ส่วน Lookbehind (?<=...) ตรวจสอบด้านหน้า ใช้สำหรับ conditional matching ที่ซับซ้อน
ใช้ (?<name>...) เพื่อตั้งชื่อ group แทนการอ้างอิงด้วยหมายเลข เช่น (?<year>\d)-(?<month>\d) ทำให้โค้ดอ่านง่ายและ maintain ง่ายขึ้น
ภาษาไทยไม่มีช่องว่างระหว่างคำ \b จึงทำงานไม่ดีกับคำไทย ควรใช้ Unicode range [\u0E00-\u0E7F] สำหรับจับคู่อักขระไทยโดยเฉพาะ
อ้างอิง
- MDN Web Docs — Regular Expressions
- JavaScript.info — Regular Expressions
- Regex101.com — Regular Expression Reference
เครื่องมือนี้ใช้ JavaScript RegExp engine ผลลัพธ์อาจแตกต่างจาก regex engine ในภาษาอื่น ควรทดสอบในภาษาที่จะใช้งานจริงด้วย