เหตุใด Regex จึงคุ้มค่าที่จะเรียนรู้
นิพจน์ทั่วไปที่ได้รับการออกแบบมาอย่างดีสามารถแทนที่โค้ดแยกวิเคราะห์สตริงแบบแมนนวลได้ 50 บรรทัด มันทำงานในหน่วยไมโครวินาที มันทำงานได้ในแทบทุกภาษาการเขียนโปรแกรม และเมื่อคุณเข้าใจไวยากรณ์แล้ว คุณก็สามารถเขียนรูปแบบที่ต้องใช้เวลาหลายชั่วโมงเพื่อนำไปใช้กับตรรกะแบบมีเงื่อนไขได้
สิ่งกีดขวางไม่ใช่แนวคิด แต่เป็นสัญกรณ์ Regex ใช้ไวยากรณ์ที่มีสัญลักษณ์หนาแน่นซึ่งดูเหมือนเป็นคำพูดที่ไม่มีความหมายเมื่อมองแวบแรก เมื่อคุณเรียนรู้ที่จะอ่านมันแล้ว คุณจะเห็นรูปแบบของโค้ด ข้อมูล และข้อความที่คุณไม่เคยเห็นมาก่อน
การอ้างอิงด่วนเกี่ยวกับรูปแบบที่จำเป็น
| ลวดลาย | ไม้ขีด | ตัวอย่าง |
|---|---|---|
\d | ตัวเลขใดๆ 0–9 | \d{4} → 2025 |
\w | ตัวอักษร ตัวเลข หรือขีดล่าง | \w+→ "สวัสดี_โลก" |
\s | ช่องว่างใดๆ | \s+→ ช่องว่างตั้งแต่หนึ่งช่องขึ้นไป |
^ / $ | สตริงเริ่มต้น / สิ้นสุด | ^\d{5}$→ รหัสไปรษณีย์ 5 หลักพอดี |
[เอบีซี] | ใดๆ ของ: a, b หรือ c | [อ้าว]→ สระใดก็ได้ |
[^เอบีซี] | อะไรก็ได้ยกเว้น a, b, c | [^\ง]→ ไม่ใช่ตัวเลข |
? | 0 หรือ 1 ก่อนหน้า | สี→ สี หรือ สี |
+ | 1 หรือมากกว่า | \d+→ หนึ่งหรือหลายหลัก |
* | 0 หรือมากกว่า | \d*→ เลขศูนย์หรือมากกว่านั้น |
{n,m} | ระหว่าง n ถึง m ครั้ง | \d{3,5}→ 3 ถึง 5 หลัก |
รูปแบบที่ควรค่าแก่การบุ๊กมาร์ก
- อีเมล:
/^[\w.+-]+@[\w-]+\.[a-z]{2,}$/i - การแยก URL:
/https?:\/\/[^\s"'<>]+/g - ลบช่องว่างเพิ่มเติม:
/\s+/ก→ แทนที่ด้วยช่องว่างเดียว - แยกแฮชแท็ก:
/#[\w]+/ก - จับคู่ทั้งคำเท่านั้น:
/\bคำ\b/
กตั้งค่าสถานะเพื่อค้นหาการแข่งขันทั้งหมด (ไม่ใช่แค่รายการแรก)ฉันสำหรับการจับคู่แบบคำนึงถึงขนาดตัวพิมพ์ และมที่จะทำให้^และ$จับคู่ขอบเขตบรรทัดแทนขอบเขตสตริง รูปแบบ regex ในโลกแห่งความเป็นจริงส่วนใหญ่ต้องมีอย่างน้อยกหรือฉัน."การย้อนรอยหายนะ" คืออะไร?
รูปแบบเหมือน(ก+)+ใช้กับสตริงที่ไม่ตรงกันยาวๆ ทำให้เกิดเวลาประมวลผลแบบเอ็กซ์โพเนนเชียล — เอ็นจิ้น regex ของคุณติดขัดเมื่อพยายามผสมค่าผสมให้มากขึ้นแบบทวีคูณ หลีกเลี่ยงปริมาณที่ซ้อนกันบนรูปแบบที่ทับซ้อนกัน รูปแบบ(ก+)+ขที่ "aaaaaaaaaaaaaaaac" จะหยุดการทำงานของเซิร์ฟเวอร์
JavaScript regex ทำงานเหมือนกับ Python หรือไม่
ส่วนใหญ่ใช่ โดยมีความแตกต่างในกลุ่มที่มีชื่อ (JS ใช้(?<ชื่อ>), Python ใช้(?P<ชื่อ>)) ความสามารถ lookahead/lookbehind บางอย่าง และสัญลักษณ์คลาสอักขระ ผู้ทดสอบนี้ใช้เครื่องมือของ JavaScript — ทดสอบในภาษาเป้าหมายของคุณหากพฤติกรรมแตกต่างออกไป