Regular expression (regex) เป็นรูปแบบที่ทรงพลังสำหรับค้นหา จับคู่ และดึงข้อความ ใช้ในการเขียนโปรแกรม การตรวจสอบข้อมูล การค้นหาและแทนที่ และการวิเคราะห์ log ความท้าทายคือ regex syntax อาจเขียนให้ถูกต้องได้ยาก ตัวทดสอบ Regex ฟรีให้คุณทดลองเรียลไทม์เพื่อเห็นว่ารูปแบบจับคู่กับอะไร
สิ่งที่ต้องใช้
- รูปแบบที่ต้องการทดสอบ หรือปัญหาการจับคู่ข้อความที่ต้องแก้
- เว็บเบราว์เซอร์ (Chrome, Firefox, Safari หรือ Edge)
- ไม่ต้องมีบัญชีหรือติดตั้ง
คู่มือทีละขั้นตอน
เปิดตัวทดสอบ Regex
ไปที่เครื่องมือ ตัวทดสอบ Regex จะเห็นสองพื้นที่หลัก: หนึ่งสำหรับรูปแบบ regular expression และหนึ่งสำหรับข้อความทดสอบที่ต้องการจับคู่
เขียนรูปแบบ regex
ป้อน regular expression ในช่องรูปแบบ เริ่มง่ายๆ แล้วเพิ่มความซับซ้อน เช่น เริ่มด้วยคำตรงตัวอย่าง hello เพื่อจับคู่ข้อความนั้น แล้วปรับรูปแบบด้วยอักขระพิเศษเพื่อจับคู่รูปแบบที่กว้างขึ้น
ป้อนข้อความทดสอบ
วางหรือพิมพ์ข้อความตัวอย่างในพื้นที่ทดสอบ ใส่ตัวอย่างที่ควรตรงและไม่ควรตรง เครื่องมือไฮไลท์ส่วนที่ตรงทั้งหมดเรียลไทม์ขณะพิมพ์ เห็นทันทีว่ารูปแบบทำงานถูกต้องหรือไม่
ปรับแต่งและตรวจสอบ
ปรับรูปแบบแล้วดูการจับคู่อัปเดตทันที เพิ่ม edge case ในข้อความทดสอบ — อินพุตที่ผิดปกติ เงื่อนไขขอบ และรูปแบบที่ยุ่งยาก — เพื่อให้แน่ใจว่า regex จัดการได้ถูกต้อง เมื่อพอใจ คัดลอกรูปแบบไปใช้ในโค้ดหรือเครื่องมือ
ควรรู้ ตัวทดสอบ Regex ทำงานทั้งหมดในเบราว์เซอร์ ไม่ส่งข้อมูลไปเซิร์ฟเวอร์ใดๆ ทดสอบรูปแบบกับข้อความที่ละเอียดอ่อนเช่นอีเมล ไฟล์ log หรือข้อมูลส่วนตัวได้อย่างปลอดภัย
ไวยากรณ์ regex ที่จำเป็น
| สัญลักษณ์ | ความหมาย | ตัวอย่าง |
|---|---|---|
. |
ตัวอักษรใดก็ได้หนึ่งตัว | h.t ตรงกับ "hat", "hit", "hot" |
* |
ศูนย์ตัวหรือมากกว่าของตัวก่อนหน้า | ab*c ตรงกับ "ac", "abc", "abbc" |
+ |
หนึ่งตัวหรือมากกว่าของตัวก่อนหน้า | ab+c ตรงกับ "abc", "abbc" แต่ไม่ "ac" |
? |
ศูนย์หรือหนึ่งตัวของตัวก่อนหน้า | colou?r ตรงกับ "color" และ "colour" |
\d |
ตัวเลขใดก็ได้ (0-9) | \d{3} ตรงกับ "123", "456" |
\w |
ตัวอักษรคำใดก็ได้ | \w+ ตรงกับ "hello", "test123" |
\s |
ช่องว่างใดก็ได้ | hello\sworld ตรงกับ "hello world" |
^ |
ต้นสตริง | ^Hello ตรงกับ "Hello world" |
$ |
ท้ายสตริง | world$ ตรงกับ "Hello world" |
[abc] |
ตัวอักษรใดก็ได้ในชุด | [aeiou] ตรงกับสระใดก็ได้ |
(...) |
กลุ่มจับ | (ab)+ ตรงกับ "ab", "abab" |
รูปแบบที่ใช้บ่อยที่ลองได้
คัดลอกรูปแบบเหล่านี้ใส่ ตัวทดสอบ Regex แล้วทดลอง
ที่อยู่อีเมล
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
ตรงกับรูปแบบอีเมลมาตรฐานเช่น user@example.com และ first.last@company.co.uk ทดสอบกับรูปแบบอีเมลที่ถูกและไม่ถูกต้อง
URL
https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/[^\s]*)?
ตรงกับ URL แบบ HTTP และ HTTPS เช่น https://example.com และ http://site.org/path/page s? ทำให้ "s" ใน "https" เป็นตัวเลือก
เบอร์โทรศัพท์ (รูปแบบไทย)
(\+66|0)\d{1,2}[-.\s]?\d{3,4}[-.\s]?\d{4}
ตรงกับรูปแบบเบอร์โทรศัพท์ไทยต่างๆ: 081-234-5678, 0812345678, +66 81 234 5678 และรูปแบบคล้ายกัน
เคล็ดลับ เมื่อสร้าง regex เริ่มด้วยรูปแบบที่ง่ายที่สุดที่ตรงกับข้อความเป้าหมาย แล้วเพิ่มข้อจำกัดทีละตัว การพยายามเขียน regex ที่ซับซ้อนทีเดียวยากกว่าการสร้างทีละส่วนขณะดูการจับคู่อัปเดตเรียลไทม์
ข้อผิดพลาดที่พบบ่อยและวิธีหลีกเลี่ยง
ลืม escape อักขระพิเศษ อักขระเช่น ., *, +, ?, (, ), [, ], {, } มีความหมายพิเศษใน regex เพื่อจับคู่ตามตัวอักษร ใส่ backslash นำหน้า: \. ตรงกับจุด \( ตรงกับวงเล็บ
กว้างเกินไป (greedy) โดยค่าเริ่มต้น * และ + จับคู่ข้อความให้มากที่สุด หากต้องการจับคู่ที่สั้นที่สุด เพิ่ม ? หลัง: .*? จับคู่ให้น้อยที่สุด
ไม่ยึดรูปแบบ (anchor) หากไม่มี ^ และ $ รูปแบบเช่น \d{3} จะจับคู่ตัวเลขติดกัน 3 ตัวที่ไหนก็ได้ในสตริง รวมถึงในตัวเลขที่ยาวกว่า ใช้ anchor เมื่อต้องจับคู่ทั้งสตริง
สำคัญ ไวยากรณ์ regex แตกต่างเล็กน้อยระหว่างภาษาโปรแกรมและเครื่องมือ รูปแบบที่ใช้ได้ใน JavaScript อาจทำงานต่างใน Python หรือ PHP ทดสอบรูปแบบสุดท้ายในภาษาหรือสภาพแวดล้อมที่จะใช้จริงเสมอ
คำถามที่พบบ่อย
regex flag คืออะไร?
Flag ปรับวิธีใช้รูปแบบ Flag ที่พบบ่อยรวมถึง g (global — หาทั้งหมด ไม่ใช่แค่ตัวแรก) i (ไม่สนใจตัวพิมพ์ใหญ่เล็ก) และ m (multiline — ^ และ $ ตรงกับขอบบรรทัด ไม่ใช่แค่ขอบสตริง) ตัวทดสอบ Regex ให้สลับ flag เหล่านี้ได้
ใช้ regex สำหรับค้นหาและแทนที่ได้ไหม?
ได้ text editor และภาษาโปรแกรมส่วนใหญ่รองรับ find and replace แบบ regex กลุ่มจับ (...) ให้อ้างอิงข้อความที่ตรงในสตริงแทนที่
จับคู่ข้ามหลายบรรทัดได้อย่างไร?
ใช้ flag s (dotall) เพื่อให้ . ตรงกับอักขระขึ้นบรรทัดใหม่ หรือใช้ [\s\S] เป็นทางเลือกข้ามแพลตฟอร์มที่ตรงกับอักขระใดก็ได้รวมขึ้นบรรทัดใหม่
ขั้นตอนถัดไป
เมื่อสร้างและทดสอบรูปแบบ regex ได้แล้ว ลองใช้ในโค้ด text editor หรือ command-line สำหรับเครื่องมือนักพัฒนาอื่น ดู ตัวแปล Cron สำหรับ scheduling expression หรือ ตัวจัดรูปแบบ JSON สำหรับทำงานกับข้อมูลโครงสร้าง