การใช้เรกุลาร์เอ็กเพรสชัน

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