TypeScript:
การใช้เรกุลาร์เอ็กเพรสชัน
วิธีการ:
มาดูใน TypeScript และดูว่า regex ใช้สำหรับงานทั่วไปอย่างไร
// กำหนด pattern ของ regex สำหรับที่อยู่อีเมล
const emailPattern = /\S+@\S+\.\S+/;
// ทดสอบว่าสตริงตรงกับ pattern ของอีเมลหรือไม่
const email = "[email protected]";
console.log(emailPattern.test(email)); // ผลลัพธ์: true
// ค้นหาและแทนที่ตัวเลขในสตริง
const replaceDigits = "Item 25 costs $30".replace(/\d+/g, '#');
console.log(replaceDigits); // ผลลัพธ์: "Item # costs $#"
// การสกัดส่วนที่เฉพาะเจาะจงจากสตริงโดยใช้กลุ่มการจับ
const data = "April 10, 2021";
const datePattern = /(\w+) (\d+), (\d+)/;
const [, month, day, year] = datePattern.exec(data) || [];
console.log(month, day, year); // ผลลัพธ์: "April" "10" "2021"
ศึกษาเพิ่มเติม
ในยุค 1950s นักคณิตศาสตร์ Stephen Kleene ได้อธิบายนิพจน์ปกติเป็นแบบจำลองสำหรับการแทนภาษาปกติ ซึ่งต่อมาได้กลายเป็นสิ่งจำเป็นในวิทยาการคอมพิวเตอร์ ข้ามมายังปัจจุบัน regex เป็นเครื่องมือที่อยู่ในทุกๆ การเขียนโปรแกรมสำหรับการจัดการข้อความ
แม้ว่า regex จะเป็นมีดสวิสสำหรับการดำเนินการกับสตริง แต่ก็ไม่ได้หมดทางเลือก ขึ้นอยู่กับความซับซ้อนของงานบางครั้งเมธอดของสตริงเช่น includes()
, startsWith()
, endsWith()
หรือแม้กระทั่งการแยกวิเคราะห์โดยใช้ไลบรารีอาจจะดีกว่า เช่น การวิเคราะห์สตริง JSON ที่ซับซ้อนโดยใช้ regex อาจเป็นฝันร้าย—ใช้ตัวแยกวิเคราะห์ JSON แทน
เกี่ยวกับการนำไปใช้งาน regex ใน JavaScript และ TypeScript ตามมาตรฐานภาษา ECMAScript เบื้องหลังมาตรฐานเครื่องมือใช้เครื่องจักรสถานะเพื่อจับคู่แพทเทิร์นอย่างมีประสิทธิภาพ ควรทราบว่าการดำเนินการ regex อาจจะมีราคาแพงในแง่ของประสิทธิภาพ โดยเฉพาะกับแพทเทิร์นที่เขียนไม่ดี—ระวัง “catastrophic backtracking”
ดูเพิ่มเติม
- คู่มือ MDN เกี่ยวกับนิพจน์ปกติ: MDN นิพจน์ปกติ
- Regex101: เครื่องมือสำหรับทดสอบและแก้ไขนิพจน์ปกติ Regex101
- หนังสือ “Mastering Regular Expressions” สำหรับความเข้าใจอย่างลึกซึ้ง: O’Reilly