Cách sử dụng Biểu thức chính quy trong JavaScript

Cụm từ thông dụng, thường được gọi là “regex” hoặc “regexp”, là các chuỗi mô tả mẫu tìm kiếm. Bạn có thể sử dụng biểu thức chính quy để kiểm tra xem một chuỗi có chứa một mẫu cụ thể hay không, trích xuất thông tin từ một chuỗi và thay thế các phần của chuỗi bằng văn bản mới.
Tìm hiểu cú pháp cơ bản của biểu thức chính quy và cách sử dụng chúng trong JavaScript.
Mục Lục
Cú pháp cơ bản của biểu thức chính quy
Có hai cách bạn có thể tạo một biểu thức chính quy trong JavaScript: sử dụng một biểu thức chính quy bằng chữ và sử dụng RegExp hàm tạo.
Một ký tự biểu thức chính quy bao gồm một mẫu được đặt giữa các dấu gạch chéo về phía trước, theo sau là một cờ tùy chọn.
Ví dụ:
const regexExpression_1 = /pattern/
const regexExpression_2 = /pattern/flag
Cờ là một tham số tùy chọn mà bạn có thể thêm vào biểu thức chính quy để sửa đổi hành vi của nó. Ví dụ:
const regexFlag = /the/g;
Các g cờ cho biết rằng biểu thức phải khớp với tất cả các lần xuất hiện, không chỉ lần đầu tiên.
Bạn cũng có thể tạo một biểu thức chính quy bằng cách sử dụng RegExp hàm tạo. Ví dụ:
const regexExpression = new RegExp("Pattern", "g");
Các RegExp hàm tạo nhận hai tham số: một mẫu—một chuỗi hoặc một biểu thức chính quy bằng chữ—và (các) cờ.
Có hai cờ khá phổ biến mà bạn sẽ sử dụng với biểu thức chính quy trong JavaScript:
- g: Cờ chung làm cho biểu thức chính quy khớp với tất cả các lần xuất hiện của mẫu trong chuỗi đã cho thay vì một lần xuất hiện.
- tôi: Cờ không phân biệt chữ hoa chữ thường làm cho biểu thức chính quy bỏ qua chữ hoa chữ thường của mẫu và khớp các ký tự chữ hoa và chữ thường trong chuỗi đã cho.
Bạn có thể sử dụng các cờ cùng nhau trong một biểu thức theo thứ tự bất kỳ. Ví dụ:
const regexExpression = new RegExp("Pattern", "gi");
Biểu thức này sẽ khớp với tất cả các lần xuất hiện của “Mẫu”, bất kể trường hợp nào.
Trong các biểu thức chính quy, một số ký tự nhất định, được gọi là siêu ký tự, có ý nghĩa đặc biệt. Bạn có thể sử dụng chúng để khớp với các loại ký tự hoặc mẫu cụ thể.
Dưới đây là một số siêu ký tự được sử dụng phổ biến nhất và ý nghĩa của chúng:
- Ký tự đại diện (.): Ký tự này khớp với bất kỳ ký tự đơn nào ngoại trừ một dòng mới. Đó là một công cụ hữu ích để khớp các mẫu có ký tự không xác định.
- Ngôi sao Kleene (*): Ký tự này khớp với 0 hoặc nhiều lần xuất hiện của ký tự hoặc nhóm trước đó. Nó cho phép ký tự hoặc nhóm trước đó xuất hiện bất kỳ số lần nào trong chuỗi, kể cả số không.
- Ký tự tùy chọn (?): Ký tự này khớp với số không hoặc một lần xuất hiện của ký tự hoặc nhóm trước đó.
- Bắt đầu neo dòng (^): Ký tự này chỉ khớp với phần đầu của một dòng hoặc chuỗi.
- Neo cuối dòng ($): Ký tự này khớp với cuối dòng hoặc chuỗi.
- Bộ ký tự/Lớp ([]): Một bộ ký tự khớp với bất kỳ ký tự nào từ một bộ ký tự trong một chuỗi. Bạn xác định chúng bằng dấu ngoặc vuông [] và bạn có thể chỉ định một bộ ký tự cố định, ký tự đặc biệt hoặc nhóm ký tự nhất định.
- Nhân vật luân phiên (|): Ký tự này khớp với ký tự hoặc nhóm trước hoặc sau. Nó hoạt động tương tự như toán tử OR JavaScript.
- Nhóm ký tự (()): Tính năng nhóm ký tự cho phép bạn nhóm các ký tự hoặc biểu thức con, áp dụng các toán tử cho chúng dưới dạng một đơn vị và kiểm soát thứ tự của các thao tác.
Kiểm tra chuỗi dựa trên biểu thức chính quy trong JavaScript
Trong JavaScript, bạn có thể kiểm tra một chuỗi dựa trên một biểu thức chính quy bằng một số phương thức.
Phương pháp kiểm tra
Các .kiểm tra() trả về một giá trị boolean cho biết biểu thức chính quy có khớp với chuỗi hay không. Phương thức này lấy một chuỗi để thực hiện tìm kiếm làm đối số. Nó đặc biệt hữu ích cho việc kiểm tra đơn giản.
Ví dụ:
let regex = /.com$/;
let str = "example.com";
console.log(regex.test(str));
Biểu thức chính quy này khớp với một chuỗi kết thúc bằng “.com”.
Phương thức exec
Các .exec() phương thức trả về một mảng chứa văn bản phù hợp và bất kỳ nhóm hoặc vô giá trị nếu nó không tìm thấy một trận đấu. Phương thức này lấy một chuỗi để thực hiện tìm kiếm làm đối số. Nó rất hữu ích cho các biểu thức chính quy phức tạp hơn.
Ví dụ:
let regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
let str = "123-456-7890";
let result = regex.exec(str);if (result !== null) {
console.log(`${result[0]} is a valid phone number`);
} else {
console.log("Invalid phone number");
}
Biểu thức chính quy ở trên khớp với một chuỗi bắt đầu bằng một tùy chọn “(“, ba chữ số và một” tùy chọn)“. Sau đó, nó tìm kiếm một tùy chọn”–“, “.“, hoặc dấu cách, theo sau là ba chữ số. Cuối cùng, nó tìm kiếm một tùy chọn”–“, “.“, hoặc khoảng trắng theo sau là bốn chữ số ở cuối chuỗi.
Biểu thức chính quy này khớp với các số điện thoại ở định dạng “(xxx) xxx-xxxx”, “xxx-xxx-xxxx”, “xxx.xxx.xxxx” hoặc “xxx xxx xxxx”.
Nếu nó tìm thấy một trận đấu, .exec() trả về một mảng chứa văn bản phù hợp và bất kỳ nhóm đã chụp nào (được xác định bằng dấu ngoặc đơn). Nó sẽ bao gồm mỗi nhóm như một phần tử bổ sung trong mảng mà nó trả về. Điều này cho phép bạn truy cập các phần cụ thể của văn bản phù hợp, có thể giúp bạn trích xuất thông tin từ một chuỗi.
Phương pháp thay thế
Các .thay thế() phương thức tìm kiếm sự khớp giữa biểu thức chính quy và chuỗi và thay thế văn bản khớp bằng văn bản thay thế đã chỉ định. Đây là một phương thức của các đối tượng chuỗi và nó nhận một biểu thức chính quy và một chuỗi thay thế làm đối số.
Ví dụ:
let string = "The quick brown fox jumps over the lazy dog.";
let expression = /The/gi;
let newString = string.replace(expression, "a");
console.log(newString);
Ví dụ này gọi thay thế() phương pháp trên chuỗi biến, truyền biểu thức chính quy, sự diễn đạt. Biểu thức chính quy sẽ khớp với tất cả các lần xuất hiện của “The” trong chuỗi, bất kể trường hợp nào. Cuộc gọi đến phương thức thay thế hướng dẫn nó thay thế mỗi lần xuất hiện bằng chuỗi “a”.
Cân nhắc hiệu suất khi sử dụng biểu thức chính quy
Mặc dù các biểu thức chính quy giúp khớp và thao tác các chuỗi nhưng chúng cũng có thể tốn kém về mặt hiệu suất. Tạo các mẫu càng cụ thể càng tốt và giữ cho chúng đơn giản là rất quan trọng để giữ cho chúng hoạt động hiệu quả.