เครื่องมือทดสอบและตรวจสอบ Regex ออนไลน์ฟรี - ทดสอบรูปแบบทันที
ทดสอบและตรวจสอบนิพจน์ปกติออนไลน์ด้วยการไฮไลท์แบบเรียลไทม์ เครื่องมือทดสอบรูปแบบ regex ฟรีพร้อมการตรวจสอบไวยากรณ์ ผลการจับคู่ และฟังก์ชันการบันทึก ทดสอบ regex เดี๋ยวนี้!
เครื่องมือทดสอบ Regex Pattern
ผลลัพธ์การจับคู่
ป้อนรูปแบบและข้อความทดสอบเพื่อดูผลลัพธ์
บันทึกรูปแบบ
ผลลัพธ์การจับคู่
ป้อนรูปแบบและข้อความทดสอบเพื่อดูผลลัพธ์
รูปแบบที่บันทึกไว้
ยังไม่มีรูปแบบที่บันทึกไว้
คู่มือสัญลักษณ์ Regex
.ตรงกับอักขระใดๆ ยกเว้นบรรทัดใหม่\dตรงกับตัวเลขใดๆ (0-9)\Dตรงกับอักขระที่ไม่ใช่ตัวเลข\wตรงกับอักขระคำใดๆ (a-z, A-Z, 0-9, _)\Wตรงกับอักขระที่ไม่ใช่คำ\sตรงกับอักขระช่องว่างใดๆ\Sตรงกับอักขระที่ไม่ใช่ช่องว่าง^ตรงกับจุดเริ่มต้นของบรรทัด$ตรงกับจุดสิ้นสุดของบรรทัด*ตรงกับ 0 หรือมากกว่าของอักขระก่อนหน้า+ตรงกับ 1 หรือมากกว่าของอักขระก่อนหน้า?ตรงกับ 0 หรือ 1 ของอักขระก่อนหน้า{n}ตรงกับอักขระก่อนหน้าจำนวน n ตัวอย่างแน่นอน{n,}ตรงกับอักขระก่อนหน้าอย่างน้อย n ตัว{n,m}ตรงกับอักขระก่อนหน้าระหว่าง n และ m ตัว[abc]ตรงกับอักขระใดๆ หนึ่งตัวในวงเล็บ[^abc]ตรงกับอักขระที่ไม่อยู่ในวงเล็บ(abc)จัดกลุ่มโทเค็นหลายตัวและจับคู่a|bตรงกับ a หรือ b\bตรงกับตำแหน่งขอบเขตคำเอกสารประกอบการใช้งาน
ตัวทดสอบ regex คืออะไร
ตัวทดสอบ regex เป็นเครื่องมือที่ตรวจสอบนิพจน์ทั่วไปกับข้อความส่วนหนึ่งและแสดงสิ่งที่ตรงกัน นิพจน์ทั่วไปหรือ regex คือลำดับอักขระสั้น ๆ ที่ใช้บรรยายรูปแบบของข้อความ เช่น "ตัวเลขสามหลักเรียงกัน" หรือ "คำใด ๆ ที่ขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่" เครื่องมือตรวจสอบ regex นี้ให้ผู้ใช้ป้อนรูปแบบและข้อความทดสอบ แล้วดูส่วนที่ตรงกันซึ่งถูกเน้นได้ทันทีโดยไม่ต้องเขียนโค้ด
นิพจน์ทั่วไปใช้ในภาษาโปรแกรมจำนวนมากเพื่อค้นหาข้อความ ตรวจสอบว่าข้อมูลที่ผู้ใช้ป้อนอยู่ในรูปแบบที่ถูกต้อง และดึงส่วนที่ต้องการออกจากข้อความก้อนใหญ่ ไวยากรณ์มีรูปแบบกระชับแต่เขียนผิดได้ง่าย การทดสอบรูปแบบก่อนนำไปใช้ในโปรแกรมจึงช่วยตรวจพบข้อผิดพลาดได้ตั้งแต่เนิ่น ๆ
วิธีทดสอบนิพจน์ทั่วไปออนไลน์
- พิมพ์รูปแบบ ป้อน regex ในช่องรูปแบบ เครื่องมือจะตรวจสอบไวยากรณ์ขณะที่ผู้ใช้พิมพ์ และแสดงข้อความผิดพลาดหากรูปแบบไม่ถูกต้อง เช่น เมื่อวงเล็บเหลี่ยมหรือวงเล็บกลมยังเปิดค้างอยู่
- เลือกแฟล็ก แฟล็กจะเปลี่ยนวิธีนำรูปแบบไปใช้ (ดูด้านล่าง)
- ป้อนข้อความทดสอบ พิมพ์หรือวางข้อความที่ต้องการค้นหาในกล่องข้อความทดสอบ
- อ่านผลลัพธ์ ส่วนที่ตรงกันจะถูกเน้นในข้อความ และเครื่องมือจะแจ้งจำนวนส่วนที่ตรงกัน หากมีข้อความทดสอบ เครื่องมือยังระบุด้วยว่ารูปแบบตรงกับข้อความทั้งหมดตั้งแต่ต้นจนจบ หรือตรงเพียงบางส่วน
- บันทึกรูปแบบ สามารถจัดเก็บรูปแบบพร้อมป้ายกำกับสั้น ๆ เพื่อนำกลับมาใช้ภายหลังได้ รูปแบบที่บันทึกไว้จะเก็บอยู่ในเบราว์เซอร์ ไม่ได้เก็บไว้บนเซิร์ฟเวอร์ จึงปรากฏเฉพาะในอุปกรณ์และเบราว์เซอร์เดิม
- คัดลอกผลลัพธ์ สามารถคัดลอกข้อความที่ตรงกันหรือตัวรูปแบบไปยังคลิปบอร์ดได้ด้วยการคลิกครั้งเดียว
แฟล็กของ regex
แฟล็กคือตัวอักษรเดี่ยวที่เติมหลังรูปแบบเพื่อเปลี่ยนพฤติกรรมของรูปแบบ เครื่องมือนี้รองรับแฟล็กสี่แบบ ทั้งแบบใช้เดี่ยวและใช้ร่วมกัน:
| แฟล็ก | ชื่อ | ผลลัพธ์ |
|---|---|---|
g | ทั่วทั้งข้อความ | ค้นหาส่วนที่ตรงกันทุกแห่งในข้อความ แทนที่จะหยุดที่ส่วนแรก |
i | ไม่สนตัวพิมพ์เล็กใหญ่ | ไม่สนใจความแตกต่างระหว่างตัวพิมพ์ใหญ่กับตัวพิมพ์เล็ก |
m | หลายบรรทัด | ทำให้ ^ และ $ ตรงกับต้นและท้ายของแต่ละบรรทัด ไม่ใช่เฉพาะต้นและท้ายของข้อความทั้งหมด การตั้งค่านี้เปลี่ยนตำแหน่งที่พบส่วนที่ตรงกัน แต่ไม่เปลี่ยนการตรวจสอบข้อความทั้งหมดที่อธิบายไว้ด้านล่าง |
s | จุดตรงกับทุกอักขระ | ทำให้ . ตรงกับอักขระขึ้นบรรทัดใหม่ได้ด้วย |
รวมแฟล็กได้ เช่น gi สำหรับค้นหาทั่วข้อความโดยไม่แยกพิมพ์เล็กใหญ่ หรือ gms สำหรับค้นหาทั่วข้อความ หลายบรรทัด และให้จุดตรงกับทุกอักขระ
วิธีที่เครื่องมือค้นหาส่วนที่ตรงกัน
ตัวจับคู่จะค้นหาทุกรายการที่รูปแบบปรากฏในข้อความเสมอ จึงทำให้การนับส่วนที่ตรงกันทำงานเสมือนเปิดแฟล็ก global แม้ไม่ได้เลือกแฟล็กนี้ในรายการแบบดรอปดาวน์ แต่ละส่วนที่ตรงกันจะถูกบันทึกพร้อมตำแหน่งและความยาว จากนั้นข้อความต้นฉบับจะถูกแยกเป็นส่วนที่ตรงกันและไม่ตรงกัน เพื่อเน้นส่วนที่ตรงกัน
ในการตรวจสอบว่ารูปแบบตรงกับข้อความ ทั้งหมด หรือไม่ เครื่องมือจะห่อรูปแบบไว้ในกลุ่มที่ไม่จับข้อความและใส่จุดยึดเป็น ^(?:pattern)$ การจัดกลุ่มมีความสำคัญเพราะ | (การเลือกทางใดทางหนึ่ง) มีลำดับการผูกที่หลวมกว่าจุดยึด หากไม่มีกลุ่ม รูปแบบอย่าง cat|dog ที่ใส่จุดยึดเป็น ^cat|dog$ จะมีความหมายจริงว่า "ขึ้นต้นด้วย cat หรือ ลงท้ายด้วย dog" ซึ่งไม่เหมือนกับ "ข้อความทั้งหมดคือ cat หรือ dog"
การตรวจสอบนี้จะตัดแฟล็กหลายบรรทัดออกด้วย เมื่อกำหนด m แล้ว ^ และ $ จะตรงกับจุดขึ้นบรรทัดใหม่ทุกแห่ง ดังนั้นการทดสอบที่ใส่จุดยึดจะตอบว่า "มีบรรทัดใดบรรทัดหนึ่งตรงกันหรือไม่" แทนที่จะตอบว่า "ข้อความทั้งหมดตรงกันหรือไม่" เครื่องมือจะนำ m ออกสำหรับการตรวจสอบนี้ และคง i กับ s ไว้ เพราะแฟล็กสองตัวนี้เปลี่ยนสิ่งที่รูปแบบตรงกัน ไม่ใช่ตำแหน่งของจุดยึด ดังนั้นคำตอบจึงอ้างถึงข้อความทั้งหมดเสมอ รวมถึงอักขระขึ้นบรรทัดใหม่
ตัวอย่างพร้อมวิธีทำ
รูปแบบ: \d+ (ตัวเลขอย่างน้อยหนึ่งหลัก), แฟล็ก: g, ข้อความทดสอบ: Room 12 has 5 chairs
- พบส่วนที่ตรงกัน:
12และ5ดังนั้นจำนวนส่วนที่ตรงกันคือ 2 - การตรวจสอบข้อความทั้งหมด: รูปแบบไม่ตรงกับข้อความทั้งหมด เพราะข้อความยังมีตัวอักษรและช่องว่าง
หากเปลี่ยนข้อความทดสอบเป็น 12345 รูปแบบเดิมจะตรงกับสตริงทั้งหมด ดังนั้นการตรวจสอบข้อความทั้งหมดจะแจ้งว่าเป็นจริง
เอกสารอ้างอิงไวยากรณ์ regex
การจับคู่อักขระ
| สัญลักษณ์ | ความหมาย | ตัวอย่าง | สิ่งที่ตรงกัน |
|---|---|---|---|
. | อักขระใด ๆ ยกเว้นอักขระขึ้นบรรทัดใหม่ | a.c | "abc", "adc", "a1c" |
\d | ตัวเลขใด ๆ ตั้งแต่ 0 ถึง 9 | \d{3} | "123", "456" |
\D | อักขระใด ๆ ที่ไม่ใช่ตัวเลข | \D+ | "abc", "xyz" |
\w | ตัวอักษร ตัวเลข หรือขีดล่างใด ๆ | \w+ | "abc123", "test_123" |
\W | อักขระใด ๆ ที่ไม่ใช่ตัวอักษร ตัวเลข หรือขีดล่าง | \W+ | "!@#" |
\s | อักขระช่องว่างใด ๆ | a\sb | "a b" |
\S | อักขระใด ๆ ที่ไม่ใช่ช่องว่าง | \S+ | "abc" |
จุดยึดตำแหน่ง
| สัญลักษณ์ | ความหมาย | ตัวอย่าง | สิ่งที่ตรงกัน |
|---|---|---|---|
^ | ต้นบรรทัด | ^abc | "abc" ที่ต้นบรรทัด |
$ | ท้ายบรรทัด | abc$ | "abc" ที่ท้ายบรรทัด |
\b | ขอบเขตคำ | \bword\b | "word" ในฐานะคำเต็ม |
ตัวระบุจำนวน
| สัญลักษณ์ | ความหมาย | ตัวอย่าง | สิ่งที่ตรงกัน |
|---|---|---|---|
* | รายการก่อนหน้าจำนวนศูนย์ครั้งขึ้นไป | a*b | "b", "ab", "aab" |
+ | รายการก่อนหน้าจำนวนหนึ่งครั้งขึ้นไป | a+b | "ab", "aab" |
? | รายการก่อนหน้าจำนวนศูนย์หรือหนึ่งครั้ง | colou?r | "color", "colour" |
{n} | รายการก่อนหน้าจำนวน n ครั้งพอดี | a{3} | "aaa" |
{n,} | รายการก่อนหน้าจำนวนอย่างน้อย n ครั้ง | a{2,} | "aa", "aaa" |
{n,m} | รายการก่อนหน้าจำนวนระหว่าง n ถึง m ครั้ง | a{2,4} | "aa", "aaa", "aaaa" |
ชุดอักขระและกลุ่ม
| สัญลักษณ์ | ความหมาย | ตัวอย่าง | สิ่งที่ตรงกัน |
|---|---|---|---|
[abc] | อักขระหนึ่งตัวใด ๆ ที่ระบุไว้ในวงเล็บเหลี่ยม | [aeiou] | สระเดี่ยวใด ๆ |
[^abc] | อักขระใด ๆ ที่ไม่ได้ระบุไว้ในวงเล็บเหลี่ยม | [^aeiou] | อักขระที่ไม่ใช่สระใด ๆ |
(abc) | จัดกลุ่มอักขระและจับส่วนที่ตรงกัน | (abc)+ | "abc", "abcabc" |
| \a\ | b\ | ตรงกับ a หรือ b | \cat\ |
มีคุณลักษณะอีกสองอย่างที่ควรรู้ การตรวจสอบล่วงหน้า (lookahead) ซึ่งเขียนเป็น a(?=b) จะตรงกับ "a" เฉพาะเมื่อมี "b" อยู่ถัดไป โดยไม่รวม "b" ในส่วนที่ตรงกัน ส่วนการตรวจสอบย้อนหลัง (lookbehind) ซึ่งเขียนเป็น (?<=a)b จะตรงกับ "b" เฉพาะเมื่ออยู่ถัดจาก "a" โดยตรง
ตัวอย่างรูปแบบที่ใช้บ่อย
สามารถวางรูปแบบเหล่านี้ลงในเครื่องมือเพื่อดูการทำงานกับข้อความตัวอย่าง
ตัวเลขเท่านั้น: ^\d+$ จะตรงกับสตริงที่ประกอบด้วยตัวเลขทั้งหมด เช่น "48210" และปฏิเสธสิ่งที่มีตัวอักษรหรือช่องว่าง
ที่อยู่อีเมล (การตรวจสอบเบื้องต้น): ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ จะตรงกับที่อยู่ในรูปแบบ name@domain.tld เช่น "user@example.com" นี่เป็นเพียงการตรวจสอบอย่างง่าย ไม่ใช่รูปแบบอีเมลทั้งหมดตามมาตรฐานอินเทอร์เน็ต ดังนั้นที่อยู่อีเมลบางรูปแบบที่ไม่ปกติแต่ถูกต้องจะไม่ผ่านการตรวจสอบ
หมายเลขโทรศัพท์สหรัฐฯ: ^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$ จะตรงกับรูปแบบ เช่น "(123) 456-7890", "123-456-7890" และ "1234567890"
วันที่ในรูปแบบ YYYY-MM-DD: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$ ตรวจสอบว่าเดือนอยู่ระหว่าง 01 ถึง 12 และวันอยู่ระหว่าง 01 ถึง 31 แต่ไม่ได้ตรวจสอบว่าวันนั้นถูกต้องสำหรับเดือนที่ระบุหรือไม่ จึงยอมรับ "2024-02-30" แม้เดือนกุมภาพันธ์จะไม่มี 30 วัน
คำถามที่พบบ่อย
นิพจน์ทั่วไปคืออะไร นิพจน์ทั่วไปคือลำดับอักขระที่กำหนดรูปแบบการค้นหา ใช้สำหรับค้นหา จับคู่ และแก้ไขข้อความในภาษาโปรแกรมและโปรแกรมแก้ไขข้อความส่วนใหญ่
แฟล็ก global ทำหน้าที่อะไร
หากไม่มีแฟล็ก global การค้นหามักหยุดหลังพบส่วนที่ตรงกันครั้งแรก เมื่อมีแฟล็ก global (g) การค้นหาจะดำเนินต่อและรายงานส่วนที่ตรงกันทุกแห่งในข้อความ เครื่องมือนี้จะค้นหาส่วนที่ตรงกันทั้งหมดเมื่อนับจำนวนเสมอ ไม่ว่าเลือกแฟล็กใด
จะจับคู่จุดจริงหรืออักขระพิเศษอื่นได้อย่างไร
ใส่แบ็กสแลชไว้ข้างหน้า ตัวอย่างเช่น \. จะตรงกับจุดจริงแทนที่จะหมายถึง "อักขระใด ๆ" ซึ่งเป็นความหมายของ . ที่ไม่ได้ใส่อักขระหลีก
.* กับ .*? ต่างกันอย่างไร
.* เป็นแบบละโมบและจับคู่อักขระให้มากที่สุดเท่าที่ทำได้ ส่วน .*? เป็นแบบขี้เกียจและจับคู่อักขระให้น้อยที่สุดเท่าที่ทำได้ โดยยังทำให้ส่วนที่เหลือของรูปแบบตรงกันได้
เหตุใดเครื่องมือจึงบอกว่าข้อความไม่ตรงกันทั้งหมด ทั้งที่ทุกบรรทัดตรงกัน
การตรวจสอบข้อความทั้งหมดถือว่าข้อความเป็นสตริงเดียว โดยรวมอักขระขึ้นบรรทัดใหม่ด้วย รูปแบบอย่าง \d+ จะตรงกับแต่ละบรรทัดของ 12 และ 34 แยกกัน แต่สองบรรทัดรวมอักขระขึ้นบรรทัดใหม่ระหว่างกลางไม่ใช่ตัวเลขทั้งหมด ดังนั้นผลการตรวจสอบข้อความทั้งหมดจึงเป็นไม่ หากต้องการจับคู่ข้อความที่ครอบคลุมหลายบรรทัด รูปแบบต้องครอบคลุมอักขระขึ้นบรรทัดใหม่ด้วย เช่น ใช้ [\s\S]+
จะตรวจสอบได้อย่างไรว่าสตริงทั้งหมดตรงกับรูปแบบ ไม่ใช่เพียงบางส่วน
เติม ^ ที่ต้นรูปแบบและ $ ที่ท้ายรูปแบบ เช่น ^[0-9]+$ สำหรับสตริงที่มีแต่ตัวเลข
ตัวทดสอบนี้ใช้กฎ regex เดียวกับภาษาโปรแกรมอื่นหรือไม่ เครื่องมือนี้ใช้กลไกนิพจน์ทั่วไปที่ติดตั้งมากับ JavaScript ไวยากรณ์หลักส่วนใหญ่ เช่น คลาสอักขระและตัวระบุจำนวน มีใช้ร่วมกันในหลายภาษา รวมถึง Python, Java และ Perl แต่รายละเอียดบางอย่างแตกต่างกัน ดังนั้นจึงไม่รับประกันว่ารูปแบบที่ทำงานที่นี่จะทำงานเหมือนกันทุกประการในทุกที่
เอกสารอ้างอิง
- "Regular expression." Wikipedia, มูลนิธิวิกิมีเดีย https://en.wikipedia.org/wiki/Regular_expression
- MDN Web Docs "Regular expressions." Mozilla https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
- Friedl, J. E. F. (2006). Mastering Regular Expressions. O'Reilly Media.