ทดสอบ Regex
ทดสอบนิพจน์ทั่วไป JavaScript ในเครื่องด้วยแฟล็ก g/i/m/s/u/y จำนวนการจับคู่ การจับภาพและกลุ่มที่ตั้งชื่อ ช่วงบรรทัด-คอลัมน์ และการแสดงตัวอย่างการแทนที่แบบเนทีฟ
/
/g
ข้อความทดสอบ
อักขระ
0 / 50,000
ผลการจับคู่
ป้อนรูปแบบเพื่อเริ่มการจับคู่
ข้อความแทนที่
อักขระ
0 / 50,000
ดูตัวอย่างการทดแทน
เริ่มต้นอย่างรวดเร็ว
สถานการณ์การใช้งานทั่วไป
การดึงข้อมูล
ใช้ (\d{4}-\d{2}-\d{2}) เพื่อดึงวันที่ และใช้ ([\w.]+@[\w.]+) เพื่อดึงอีเมล
การตรวจสอบรูปแบบ
เขียน regex วางตัวอย่างหลายชุด แล้วตรวจอย่างรวดเร็วว่าแพตเทิร์นตรงกับรูปแบบเป้าหมายอย่างแม่นยำหรือไม่
การแทนที่แบบชุด
ใช้ capture groups เพื่อจัดโครงสร้างเนื้อหาใหม่ เช่น เปลี่ยน "ชื่อ นามสกุล" เป็น "นามสกุล, ชื่อ" ด้วยแพตเทิร์น (\S+)\s+(\S+) และคำแทนที่ $2, $1
กลุ่มที่ตั้งชื่อ
ใช้ (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) เพื่อแยกวันที่ จากนั้นใช้ $<year>/$<month>/$<day> เพื่อสร้างใหม่
การเรียนรู้ regex
ลองแพตเทิร์นหลายแบบและสังเกตพฤติกรรมการจับคู่ เพื่อทำความเข้าใจ quantifiers, anchors และ classes ของอักขระแบบเห็นภาพ
การจัดการหลายบรรทัด
เปิดใช้แฟลก m เพื่อให้ ^ และ $ จับคู่ตามแต่ละบรรทัด เหมาะกับ log, โค้ด และไฟล์ตั้งค่า
คำแนะนำการใช้งาน
ข้อจำกัดและความเข้ากันได้
ความเป็นส่วนตัวและความปลอดภัย
คำถามที่พบบ่อย
Regex หรือนิพจน์ทั่วไปคือภาษาสำหรับอธิบายรูปแบบของข้อความ คุณอาจมองว่าเป็น "การค้นหาขั้นสูง" คือไม่ได้ค้นหาคำที่ตายตัว แต่ค้นหาข้อความทุกส่วนที่ตรงตามกฎที่กำหนดไว้\n\nตัวอย่างเช่น \\d{4}-\\d{2}-\\d{2} ใช้จับวันที่ในรูปแบบ YYYY-MM-DD และ [\\w.]+@[\\w.]+ ใช้จับอีเมล Regex มักใช้กับงานค้นหาและดึงข้อมูลจากข้อความ ตรวจสอบรูปแบบข้อมูล เช่น เบอร์โทรหรืออีเมล และแทนที่ข้อความจำนวนมากในครั้งเดียว\n\nภาษาโปรแกรมแทบทุกภาษา เช่น JavaScript, Python, Java และ Go รวมถึงเครื่องมืออย่าง VS Code, grep และ sed ต่างรองรับ regex ด้วยไวยากรณ์ที่ใกล้เคียงกัน เครื่องมือนี้ใช้เอนจิน JavaScript RegExp เพื่อให้คุณทดลองและเรียนรู้ได้อย่างรวดเร็วบนเบราว์เซอร์
โดยค่าเริ่มต้น regex ของ JavaScript จะคืนค่าผลลัพธ์ที่ตรงกันเพียงรายการแรก นี่เป็นพฤติกรรมตามสเปกของภาษา ไม่ใช่ข้อจำกัดของเครื่องมือ ให้คลิกปุ่ม g ในแถบแฟล็กเพื่อเปิดการค้นหาแบบ global แล้วดูผลลัพธ์ที่ตรงกันทั้งหมด\n\nควรสังเกตความต่างระหว่าง g และ y ด้วย: g จะไล่สแกนข้อความทั้งหมดตั้งแต่ต้นจนจบ ส่วน y (sticky) บังคับให้การจับคู่ครั้งถัดไปต้องเริ่มตรงตำแหน่งที่การจับคู่ครั้งก่อนจบพอดี หากมีอักขระคั่นอยู่ y จะหยุดทันที โดยทั่วไปเปิด g อย่างเดียวก็มักเพียงพอแล้ว
สาเหตุที่พบบ่อยมี 4 แบบ: 1. วงเล็บไม่ครบ: ทุก ( ต้องมี ) และทุก [ ต้องมี ] แม้ IDE จะเติมให้อัตโนมัติ เครื่องมือนี้จะตรวจตาม pattern ที่คุณป้อนจริง 2. วาง quantifier ผิดตำแหน่ง: *, +, ?, {n} ต้องตามหลังส่วนที่ทำซ้ำได้ รูปแบบอย่าง *+ หรือ ?* ใช้ไม่ได้ ถ้าต้องการแบบ lazy ให้เขียนเป็น *? หรือ +? 3. escape ไม่ครบ: \ เดี่ยว ๆ ท้าย pattern ใช้ไม่ได้ ต้อง escape อักขระที่เจาะจง เช่น \d, \n หรือ \\ 4. ใช้ Unicode property โดยไม่มี flag u: \p{L}, \p{Script=Han} และ property escape ลักษณะเดียวกันต้องเปิด u ในเครื่องมือนี้
นี่คือ reference สำหรับการแทนที่ของ JavaScript String.prototype.replace(): - $1, $2, ..., $99: เนื้อหาของ capture group ตามลำดับ - $&: ข้อความที่ match ทั้งหมด - $`: ข้อความก่อน match - $': ข้อความหลัง match - $<name>: เนื้อหาของ named group (?<name>...) ตัวอย่าง: ถ้า (\w+)\s(\w+) match กับ “hello world” การแทนที่ด้วย $2-$1 จะได้ “world-hello” ถ้าต้องการใส่เครื่องหมาย $ แบบตัวอักษรจริงในข้อความแทนที่ ให้เขียน $$.
regex engine ของแต่ละภาษาต่างกันหลัก ๆ 3 เรื่อง: 1. ไวยากรณ์ที่รองรับ: JavaScript ไม่รองรับ recursion ของ PCRE เช่น (?R), conditional branch เช่น (?(cond)yes|no) หรือ atomic group (?>...) ส่วน Python re ก็ไม่รองรับเช่นกัน แต่โมดูล regex ภายนอกรองรับบางส่วน Java รองรับ atomic group แต่ไม่รองรับ recursion 2. Unicode: ใน JavaScript, \w มักหมายถึงตัวอักษรละตินพื้นฐาน ตัวเลข และ underscore การเปิด u ไม่ได้ทำให้มัน match ตัวอักษรจีนอัตโนมัติ ถ้าต้องการตัวอักษร Unicode ให้ใช้ property escape เช่น \p{L} พร้อม flag u 3. ขึ้นบรรทัดใหม่: ใน Python, . ไม่ match \n โดยค่าเริ่มต้น เหมือน JavaScript ส่วน Pattern.DOTALL ของ Java คล้าย flag s ของ JavaScript ใช้เครื่องมือนี้ตรวจ JavaScript RegExp อย่างเร็ว แล้วค่อยยืนยันกับ engine ของภาษาปลายทางจริง