คู่มือเริ่มต้นของการแสดงผลปกติ (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 | ขอบเขตที่ไม่ใช่คำ |