regex ทำงานอย่างไรในเบราว์เซอร์ของคุณ?
ทุก runtime ของ JavaScript มาพร้อมกับเอนจินนิพจน์ปกติแบบเนทีฟ — new RegExp(pattern, flags) คอมไพล์แพตเทิร์นของคุณ จากนั้นเมธอดเช่น String.prototype.match, String.prototype.replace และ RegExp.prototype.exec จะรันมันกับสตริงอินพุตใดๆ เครื่องมือทดสอบนี้ห่อหุ้มเอนจินนั้นด้วย UI เพื่อให้คุณสามารถแก้ไข รันและตรวจสอบแพตเทิร์นโดยไม่ต้องออกจากเบราว์เซอร์ ไม่มีสิ่งที่คุณพิมพ์ — แพตเทิร์น แฟล็ก สตริงทดสอบ หรือการแทนที่ — ถูกส่งผ่านเครือข่าย
เครื่องมือทดสอบ regex ทำงานอย่างไร?
ไปป์ไลน์เป็นเพียงไม่กี่ขั้นตอนสั้นๆ ซึ่งทั้งหมดทำงานฝั่งไคลเอนต์ในทุกการกดแป้นพิมพ์ (โดยมี debouncing 150 มิลลิวินาทีเพื่อให้การพิมพ์ลื่นไหล):
- เนื้อหาแพตเทิร์นของคุณจะถูกอ่านจากช่องด้านบน (ไม่มีตัวคั่น
/ที่นำหน้าหรือต่อท้าย — มันเป็นเพียงการตกแต่ง) เม็ดแฟล็กที่เลือกจะถูกต่อเข้าด้วยกันเป็นสตริงแฟล็ก เช่นgiหรือgimsuy new RegExp(patternBody, flags)คอมไพล์แพตเทิร์น หากเอนจินโยนSyntaxError(เช่น วงเล็บที่ไม่ตรงคู่หรือการหลีกที่ไม่ถูกต้อง) ข้อความจะถูกแสดงเหนือสตริงทดสอบและรายการการจับคู่จะถูกล้าง ข้อผิดพลาดในการคอมไพล์เป็นerr.messageจริงจาก V8 / SpiderMonkey / JavaScriptCore ดังนั้นจึงตรงกับสิ่งที่คุณจะเห็นใน DevTools- สำหรับรายการการจับคู่ เครื่องมือทดสอบจะนับด้วยแฟล็ก global สังเคราะห์เสมอ — ดังนั้นแม้คุณจะปิด
gรายการก็ยังคงแสดงทุกการจับคู่ การป้องกันมาตรฐานสำหรับการจับคู่ความกว้างศูนย์ (if (m.index === rx.lastIndex) rx.lastIndex++) ป้องกันไม่ให้ลูปหมุนวนกับแพตเทิร์นที่จับคู่สตริงว่าง โหมดแทนที่เคารพชุดแฟล็กจริงของคุณ ดังนั้น$&จึงทำงานเหมือนกับString.prototype.replace - ระหว่างแต่ละการวนซ้ำ เครื่องมือทดสอบจะตรวจสอบ
performance.now() - startและยกเลิกเมื่อ 50 มิลลิวินาทีผ่านไป สิ่งนี้ป้องกันการย้อนกลับแบบหายนะกับอินพุตเช่น(a+)+$ต่อชุดaที่ยาว — มิฉะนั้นแท็บจะค้าง การป้องกันเป็นแบบ best-effort: แพตเทิร์นการจับคู่เดี่ยวที่เลวร้ายยังสามารถใช้เวลาภายในการเรียกexecเดียว หากเกิดขึ้น ให้รีเฟรชแท็บและเขียนแพตเทิร์นใหม่ด้วยตัวระบุปริมาณที่ไม่โลภหรือสไตล์ครอบครองอะตอม (เช่น[^x]*x) - สตริงทดสอบจะถูกแบ่งเป็นเซกเมนต์ที่ช่วงของการจับคู่แต่ละครั้ง และเซกเมนต์ที่จับคู่จะถูกห่อในองค์ประกอบ
<mark class="rx-match rx-cap-N">โดยNหมุนวนผ่านสีพาเล็ตหกสี เพื่อให้การจับคู่ที่อยู่ติดกันมองเห็นความแตกต่างได้ง่ายในพริบตา กลุ่มที่มีหมายเลขของการจับคู่แต่ละครั้ง (m[1],m[2], …) และกลุ่มที่มีชื่อ (m.groups) จะแสดงเป็นแถวที่มีป้ายชื่อด้านล่าง หากตั้งแฟล็กdดัชนี[start, end]ต่อกลุ่มก็จะแสดงด้วย
ทำไมต้องใช้เครื่องมือทดสอบ regex นี้?
- ความเป็นส่วนตัว: ทุกแพตเทิร์น สตริงทดสอบ และการแทนที่ทำงานในเบราว์เซอร์ของคุณโดยใช้เอนจิน JavaScript RegExp ในตัว ไม่มีอะไรออกจากแท็บ — สำคัญเมื่ออินพุตเป็นล็อกของลูกค้า แพตเทิร์นข้อมูลรับรองที่รั่วไหล หรือสิ่งอื่นใดที่คุณจะไม่วางลงในสนามเด็กเล่น regex SaaS ที่โฮสต์
- รสชาติที่ซื่อสัตย์: เครื่องมือทดสอบเปิดเผยเอนจิน regex อย่างแม่นยำที่ Node.js, Chrome, Safari, Firefox และตัวตรวจสอบฟอร์มในเบราว์เซอร์ทุกตัวรัน ไม่มีเลเยอร์การแปลเป็นรสชาติ Perl เพื่อซ่อนความแตกต่างที่ละเอียดอ่อน — สิ่งที่ทำงานที่นี่ทำงานในโค้ดของคุณ
- การดีบักการจับและกลุ่มมีชื่อ: กลุ่มที่มีหมายเลขแต่ละกลุ่ม (
$1,$2, …) และกลุ่มมีชื่อ ($<year>) จะแสดงต่อการจับคู่หนึ่งครั้ง ดังนั้นคุณสามารถสร้าง parser และอ่านสล็อตได้โดยไม่ต้องเดา โหมดแทนที่ให้คุณผสมกลุ่มได้อย่างอิสระ —$2-$1สลับสองสล็อตแรก,$<name>ใส่สล็อตมีชื่อ และ$&สะท้อนการจับคู่ทั้งหมด - ตัวป้องกันการย้อนกลับแบบหายนะ: เพดาน 50 มิลลิวินาทีในการนับยกเลิกแพตเทิร์นที่เลวร้ายเช่น
(a+)+$ก่อนที่จะหยุดแท็บ คุณเห็นข้อผิดพลาดที่อธิบายแทนเบราว์เซอร์ที่ค้าง และหน้าจะฟื้นทันที
การประยุกต์ใช้งานทั่วไปของเครื่องมือทดสอบ regex คืออะไร?
นิพจน์ปกติปรากฏในการพัฒนาเว็บ ความปลอดภัย และงานข้อมูล — เครื่องมือทดสอบนี้กำหนดเป้าหมายไปที่กรณีการใช้งานที่พบบ่อยที่สุด:
- การตรวจสอบฟอร์ม: ทำต้นแบบแพตเทิร์นอีเมล โทรศัพท์ หรือรหัสไปรษณีย์ วางอินพุตตัวอย่างลงในสตริงทดสอบ และยืนยันว่าทุกกรณีบวกตรงกันและทุกกรณีลบไม่ตรงกันก่อนที่คุณจะส่งแพตเทิร์นไปยังโค้ดในการผลิต
- การขูดล็อก: วางส่วนหนึ่งของเอาต์พุต NGINX แอปพลิเคชัน หรือล็อกการตรวจสอบ เขียนแพตเทิร์นที่มีกลุ่มชื่อสำหรับส่วนที่คุณสนใจ (
(?<ip>…) (?<path>…)) และอ่านสล็อตที่จับได้ต่อการจับคู่เพื่อยืนยันว่า parser ของคุณถูกต้อง - ค้นหาและแทนที่สำหรับ refactor: ใช้โหมดแทนที่เพื่อเขียนซ้ำตัวระบุในข้อมูลโค้ด —
(\w+)\.set(\w+)\(→$1.$2 =เปลี่ยนการเรียก setter เป็นการกำหนดค่าคุณสมบัติ และตัวอย่างสดแสดงผลลัพธ์ก่อนที่คุณจะนำไปใช้ใน codemod
ตัวอย่าง regex มีลักษณะอย่างไร?
ใช้แพตเทิร์น (\d{4})-(\d{2})-(\d{2}) ที่มีแฟล็ก g รันกับสตริงทดสอบ release 2025-11-15, prerelease 2026-05-25 เอนจินพบสองการจับคู่ การจับคู่แรกคือ 2025-11-15 โดยมีกลุ่ม 1 = 2025, กลุ่ม 2 = 11, กลุ่ม 3 = 15 การจับคู่ที่สองคือ 2026-05-25 ที่มีรูปกลุ่มเดียวกัน ในโหมดแทนที่ เทมเพลตการแทนที่ $3/$2/$1 เขียนวันที่ทั้งสองใหม่เป็น 15/11/2025 และ 25/05/2026 — การแปลง ISO เป็น DMY ด้วยแพตเทิร์นเดียวที่คุณสามารถยืนยันด้วยสายตาได้ก่อนเสียบแพตเทิร์นเข้ากับสคริปต์
ใช้เครื่องมือทดสอบนี้เป็นเส้นทางที่รวดเร็วสำหรับงาน regex ใดๆ — สร้าง ดีบัก หรือเขียนแพตเทิร์นใหม่ ทุกอย่างทำงานในเครื่อง ไม่มีอะไรถูกบันทึก เอนจิน regex คือสิ่งที่เบราว์เซอร์ของคุณจัดส่งมา ดังนั้นพฤติกรรมจึงตรงกับสิ่งที่โค้ดในการผลิตจะเห็นในขณะรัน