คู่มือเริ่มต้นของการแสดงผลปกติ (Regex)
นิพจน์ทั่วไปคือชุดของอักขระที่สร้างรูปแบบที่สามารถค้นหาได้ในสตริง Regex สามารถใช้สำหรับ การตรวจสอบ เช่นเพื่อตรวจสอบหมายเลขบัตรเครดิตสำหรับ ค้นหา เช่นผ่านการจับคู่ข้อความที่ซับซ้อนและสำหรับ แทนที่ข้อความที่ตรงกัน กับสายอื่น นอกจากนี้ยังมีการสนับสนุนหลายภาษาที่ยอดเยี่ยม - เรียนรู้ครั้งเดียวและคุณสามารถใช้งานได้กับหลาย ๆ ภาษาโปรแกรม.
ฉันเห็นบางคนใช้ regex ครั้งแรกและไม่สนใจมันอย่างสมบูรณ์ ฉันไม่โทษพวกเขา ไวยากรณ์ของ regex มีความซับซ้อนและจะทำให้หลายคนประจบประแจงเช่นเดียวกับภาษาบรรทัดคำสั่งเหล่านั้นเท่านั้นที่เลวร้ายยิ่ง แต่สิ่งใหม่ทุกอย่างน่ากลัวและดูเหมือนเป็นไปไม่ได้ที่จะเรียนรู้ในตอนแรก ดังนั้นการยืมคำพูดของ Horatius ฉันจะพูดอย่างนี้ เริ่มต้นเป็นตัวหนาและกล้าที่จะฉลาด.
เกี่ยวกับ Regex
Regex มีรากฐานทางประสาทวิทยาศาสตร์และคณิตศาสตร์และมีการนำไปใช้ในการเขียนโปรแกรมในปี 1968 โดย Ken Thompson ในโปรแกรมแก้ไขข้อความ QED สำหรับการค้นหาข้อความ ตอนนี้เป็นส่วนหนึ่งของภาษาโปรแกรมหลายภาษาเช่น Perl, Java, Python, Ruby และ JavaScript.
ลองดูตัวอย่างบางส่วนเกี่ยวกับวิธีการทำงานของ regex.
ฉันจะใช้จาวาสคริปต์ในตัวอย่างของฉัน ตอนนี้เพื่อที่จะผ่านระดับเริ่มต้นคุณต้องเรียนรู้ทั้งหมด ตัวละครคลาสปริมาณตัวดัดแปลงและวิธีการ ใช้ใน regex นี่คือลิงค์ไปยังหน้าแสดงผลปกติของ Mozilla Developer Network ซึ่งคุณสามารถดูตารางที่มีทั้งหมด คุณสามารถอ้างถึง cheatsheet ที่ส่วนท้ายของโพสต์นี้ด้วยตัวอักษรที่ใช้มากที่สุด.
เรามาดูตัวอย่างง่ายๆพร้อมคำอธิบาย นี่คือ regex.

นี่คือสิ่งที่ regex ด้านบนจะค้นหาในบรรทัดอักขระ 'B' ตามด้วยอักขระอย่างน้อยหนึ่งตัวระหว่าง (และรวมถึง) 'a' ถึง 'z', 'A' ถึง 'Z' และตัวเลข 0 ถึง 9.
นี่คือตัวอย่างของการจับคู่ในบรรทัดที่ไฮไลต์:
ตะกร้า, กระเปาะ, B12 วิตามิน, BaSO4, ยังไม่มีข้อความ ก่อนคริสต์ศักราช บริษัท
regex ด้านบนจะหยุดการค้นหาที่ ตะกร้า และกลับมาตอบสนองเชิงบวก นั่นเป็นเพราะ ตัวแก้ไขทั่วโลก 'ก.'จะต้องมีการระบุ หากคุณต้องการให้ regex ค้นหาการแข่งขันที่เป็นไปได้ทั้งหมด.
ตอนนี้เรามาดูวิธีการใช้นิพจน์นี้ใน JavaScript ทดสอบ วิธีการไป: หากพบว่าการแข่งขันกลับมา จริง, อื่น เท็จ.
var input = "สตริงทดสอบของคุณ", regex = / B [a-zA-Z \ d] + /; การแจ้งเตือนหาก (! regex.test (อินพุต)) ('ไม่พบข้อมูลที่ตรงกัน'); การแจ้งเตือนอื่น ('พบคู่ที่ตรงกัน'); ลองวิธีอื่น: การจับคู่ ส่งกลับการแข่งขันที่พบในอาร์เรย์.
var input = "สตริงทดสอบของคุณ", regex = / B [a-zA-Z \ d] + / g, / * ฉันได้เพิ่มตัวแก้ไขทั่วโลก 'g' ลงใน regex เพื่อให้ได้การแข่งขันทั้งหมด * / ary = input.match (regex); หากการแจ้งเตือน (ary === ว่าง) ('ไม่พบข้อมูลที่ตรงกัน'); การแจ้งเตือนอื่น ('การจับคู่คือ:' + ary.toString ()); วิธีการเกี่ยวกับสตริง แทนที่? ลองทำด้วย regex ตอนนี้.
var input = "สตริงทดสอบของคุณ", regex = / B [a-zA-Z \ d] + / g; การแจ้งเตือน (input.replace (regex, "#"));
ด้านล่างเป็น codepen เพื่อให้คุณปรับแต่ง คลิกแท็บ "JavaScript" เพื่อดูรหัส JS.
การออกกำลังกาย
สำหรับแบบฝึกหัดคุณสามารถ google “แบบฝึกหัด regex” และลองแก้พวกเขา นี่คือสิ่งที่คาดหวังเมื่อพยายามทำแบบฝึกหัดเหล่านี้ตามระดับความยาก.
ขั้นพื้นฐาน
สำหรับฉันความสามารถในการ ตรวจสอบรหัสผ่าน ก็เพียงพอสำหรับการเริ่ม ดังนั้นตรวจสอบรหัสผ่านสำหรับความยาว 8 ถึง 16 ตัวอักษรและตัวเลขพร้อมตัวเลือกอักขระพิเศษที่คุณอนุญาต.
สื่อกลาง
ที่นี่คุณควรฝึกฝนด้วยข้อมูลจริงมากขึ้นและเรียนรู้จุด regex เพิ่มเติมอีกสองสาม lookahead, lookbehind ยืนยัน และ กลุ่มที่ตรงกัน;
- ตรวจสอบรหัส PIN เลขฐานสิบหกวันที่ ID อีเมลจุดลอยตัว.
- แทนที่ศูนย์, ช่องว่าง, ชุดคำที่ตรงกัน
- แยกส่วนต่าง ๆ ของ URL
สูง
คุณสามารถเพิ่มประสิทธิภาพโซลูชันของแบบฝึกหัดข้างต้น - regex ที่เหมาะสมที่สุดสำหรับอีเมลมีอักขระหลายพันตัวในนั้น ใช้เท่าที่คุณรู้สึกสะดวกสบายและเพียงพอ. คุณสามารถลอง:
- การแยกวิเคราะห์ HTML หรือ XML (แม้ในโลกแห่งความเป็นจริงมันไม่แนะนำให้ทำเช่นนั้นเพราะการใช้นิพจน์ทั่วไปในการแยกวิเคราะห์ภาษาที่ไม่ปกติเช่น HTML จะไม่ทำให้เข้าใจผิดได้นอกจากนี้การแยกวิเคราะห์ XML เป็นงานยากเหมาะสำหรับผู้ใช้ระดับสูง)
- แทนที่แท็ก
- การลบความคิดเห็น (ยกเว้นความคิดเห็นตามเงื่อนไข IE)
เครื่องมือ
เครื่องมือในการ เห็นภาพ regex เป็นหนึ่งในสิ่งที่เจ๋งที่สุดสำหรับฉัน หากคุณเคยเจอ regex ที่ซับซ้อนมานานให้คัดลอกแปะไว้ในหนึ่งในเครื่องมือเหล่านั้นและคุณจะสามารถดูโฟลว์ได้อย่างชัดเจน นอกจากนั้นยังมีเครื่องมือมากมายที่คุณสามารถใช้ทำซอกับรหัส regex พวกเขายังแสดงตัวอย่างและแผ่นชีทพร้อมกับคุณสมบัติการแบ่งปัน.
- Debuggex - มันดึงไดอะแกรม regex ตามอินพุตของคุณและคุณสามารถแชร์อย่างรวดเร็วไปยัง StackOverflow ได้จากตรงนั้น.
- RegExr - คุณสามารถทดสอบ regex ของคุณกับอันนี้ นอกจากนี้ยังมีเอกสารอ้างอิงเอกสารและตัวอย่างเพื่อช่วยเหลือคุณ.
- Refiddle - ในตอนนี้นอกเหนือจาก JavaScript แล้วคุณยังสามารถทำซอกับ regex เวอร์ชัน Ruby และ. NET.
สูตร Regex
| เหรียญ | คำนิยาม |
| [abc] | อักขระเดี่ยวใด ๆ a, b หรือ c |
| [^ abc] | อักขระใด ๆ ที่นอกเหนือจาก a, b หรือ c |
| [a-z] | อักขระระหว่าง (รวมถึง) a ถึง z |
| [^ a-z] | ตัวละครยกเว้นจาก a ถึง z |
| [A-Z] | อักขระระหว่าง (รวมถึง) A ถึง Z |
| . | อักขระเดี่ยวใด ๆ |
| \ s | อักขระช่องว่างใด ๆ |
| \ S | อักขระที่ไม่ใช่ช่องว่าง |
| \ d | ตัวเลขใด ๆ 0 ถึง 9 |
| \ D | ไม่ใช่ตัวเลขใด ๆ |
| w \ | อักขระคำใด ๆ (ตัวอักษรหมายเลข & ขีดล่าง) |
| \ W | อักขระที่ไม่ใช่คำใด ๆ |
| (…) | จับทุกอย่างที่ล้อมรอบ |
| (a | b) | ตรงกับ a หรือ b |
| ? | อักขระ a ขาดหรือแสดงครั้งเดียว |
| A * | อักขระ a ขาดหายไปหรือมีอยู่ในปัจจุบันมากกว่านี้ |
| + | อักขระ a แสดงหนึ่งครั้งขึ้นไป |
| ก 3 | 3 ตัวละครที่ปรากฏขึ้นอย่างต่อเนื่อง |
| ก 3 | 3 หรือมากกว่านั้นเกิดขึ้นของตัวละครอย่างต่อเนื่อง |
| ก 3,6 | ลักษณะของตัวละคร 3 ถึง 6 ตัวติดต่อกัน |
| ^ | เริ่มต้นของสตริง |
| $ | จุดสิ้นสุดของสตริง |
| \ ข | ขอบเขตของคำ ถ้าตัวละครเป็นคำสุดท้ายหรือตัวอักษรแรกของคำหรือถ้าตัวละครอยู่ระหว่างคำหรือตัวอักษรที่ไม่ใช่คำ |
| \ B | ขอบเขตที่ไม่ใช่คำ |
ตอนนี้อ่าน: นิพจน์ทั่วไป: 30 เครื่องมือและทรัพยากรที่มีประโยชน์

