onlinetools.dev

ตัวทดสอบ Regex

ทดสอบนิพจน์ปรกติพร้อมไฮไลต์ผลลัพธ์และกลุ่มจับคู่แบบสด

ทำงานในเครื่อง
loading…
เกี่ยวกับเครื่องมือนี้

เขียนรูปแบบ วางข้อความตัวอย่าง แล้วทุกผลลัพธ์ที่ตรงกันจะถูกไฮไลต์ขณะที่คุณพิมพ์ — พร้อมกลุ่มจับคู่ กลุ่มแบบตั้งชื่อ และตำแหน่งที่พบ แสดงไว้ด้านล่าง ตัวทดสอบใช้เอนจิน RegExp ของ JavaScript พฤติกรรมจึงตรงกับที่ Node.js และเบราว์เซอร์จะทำทุกประการ รวมถึง lookbehind กลุ่มแบบตั้งชื่อ และ Unicode property escape

แฟล็กเปิดปิดได้ทีละตัว (g, i, m, s, u, y, d) และรูปแบบจะถูกคอมไพล์ใหม่ทุกครั้งที่กดแป้น ข้อผิดพลาดทางไวยากรณ์จึงปรากฏทันทีพร้อมข้อความจากเอนจินเอง ไม่ต้องรอกดปุ่ม รูปแบบที่จับคู่ค่าว่างอย่าง a* ถูกจัดการอย่างปลอดภัย และจำนวนผลลัพธ์ถูกจำกัดไว้ที่ 10,000 รายการ เพื่อไม่ให้ .* ที่หลุดมาทำให้แท็บค้าง

ภาษาถิ่นของ regex ต่างกันไปตามเอนจิน — รูปแบบที่ใช้ได้ที่นี่อาจต้องปรับเมื่อไปใช้กับ PCRE, RE2 หรือมอดูล re ของ Python โดยเฉพาะเรื่องการรองรับ lookbehind, possessive quantifier และแฟล็กแบบอินไลน์

คำถามที่พบบ่อย

ตัวทดสอบนี้ใช้ regex สำนักไหน?
ECMAScript (JavaScript) ตามที่เบราว์เซอร์ของคุณเองอิมพลีเมนต์ไว้ รองรับ lookahead, lookbehind, กลุ่มจับคู่แบบตั้งชื่อ, backreference และ Unicode property escape อย่าง \p{Letter} (เมื่อใช้แฟล็ก u) แต่ไม่รองรับไวยากรณ์เฉพาะของ PCRE เช่น possessive quantifier หรือการเรียกซ้ำ
ทำไมรูปแบบของฉันจับทุกอย่าง / ไม่จับอะไรเลย?
สาเหตุคลาสสิกมีสอง: อักขระพิเศษที่ไม่ได้ escape (. จับได้ทุกอักขระ — ให้เขียน \. หากต้องการจุดตามตัวอักษร) หรือลืมนึกถึงแฟล็ก g — ตัวทดสอบนี้หาผลลัพธ์ทั้งหมดเสมอ แต่โค้ดของคุณจะเจอแค่ตัวแรกหากไม่ได้ตั้ง g
กลุ่มจับคู่แบบตั้งชื่อคืออะไร?
ไวยากรณ์ (?<ชื่อ>...) ติดป้ายให้กลุ่ม คุณจึงอ่านผลลัพธ์ด้วยชื่อแทนตำแหน่งได้: match.groups.ชื่อ ใน JavaScript แผงกลุ่มใต้รายการผลลัพธ์แสดงทั้งกลุ่มแบบเลขและแบบตั้งชื่อของแต่ละรายการ
regex จากที่นี่นำไปใช้ใน Python หรือ Go ได้เลยไหม?
บ่อยครั้งได้ แต่ไม่เสมอไป คลาสอักขระ ตัวระบุจำนวน และตัวยึดตำแหน่งย้ายข้ามได้ ส่วน lookbehind ไวยากรณ์กลุ่มแบบตั้งชื่อ (Python ใช้ (?P<ชื่อ>...)) และแฟล็กแบบอินไลน์นั้นต่างกัน นอกจากนี้เอนจิน RE2 ของ Go ยังปฏิเสธ backreference และ lookaround ทั้งหมด
เครื่องมือที่เกี่ยวข้อง