Giới thiệu về biểu thức chính quy trong JavaScript
Biểu thức chính quy là những lệnh để tìm kiếm và thay thế phức tạp (hoặc đơn giản chỉ là tìm kiếm). Chúng cho phép thực hiện những điều rất thú vị, nhưng, thật không may, lại khá khó để thành thạo.
Có một số phương thức JavaScript để
làm việc với biểu thức chính quy. Chúng ta sẽ bắt đầu
làm quen với chúng qua ví dụ về replace
- bạn đã quen thuộc với phương thức này: tham số đầu tiên
của nó nhận vào thứ cần thay thế, tham số thứ hai
- thứ sẽ thay thế. Và bản thân phương thức được áp dụng
vào chuỗi, nơi thực hiện việc thay thế:
'bab'.replace('a', '!'); // trả về 'b!b'
Tham số đầu tiên của phương thức này có thể truyền vào
không chỉ đơn giản là một chuỗi, mà là một biểu thức chính quy.
Biểu thức chính quy đại diện cho một tập hợp
các lệnh, được đặt bên trong các dấu gạch chéo /. Những
dấu gạch chéo này được gọi là dấu phân cách của biểu thức
chính quy.
Bản thân các biểu thức chính quy bao gồm hai loại ký tự: những ký tự biểu thị chính chúng và những ký tự-lệnh, được gọi là ký tự đặc biệt.
Chữ cái và chữ số biểu thị chính chúng. Trong ví dụ
tiếp theo, chúng ta sẽ sử dụng biểu thức chính quy
để thay thế chữ cái 'a' bằng !:
'bab'.replace(/a/, '!'); // trả về 'b!b'
Còn dấu chấm là một ký tự đặc biệt
và biểu thị bất kỳ ký tự nào. Trong ví dụ
tiếp theo, chúng ta sẽ tìm chuỗi theo mẫu sau:
chữ cái 'x', sau đó là bất kỳ ký tự nào, sau đó
lại là chữ cái 'x':
'xax eee'.replace(/x.x/, '!'); // trả về '! eee'
Sau các dấu phân cách có thể viết các bổ ngữ
- các lệnh làm thay đổi thuộc tính chung
của biểu thức chính quy. Ví dụ, bổ ngữ
g bật chế độ tìm kiếm và thay thế
toàn cục - không có nó, regex chỉ tìm
kết quả khớp đầu tiên, còn với nó - tất cả các kết quả khớp.
Trong ví dụ tiếp theo không có bổ ngữ
g và regex sẽ chỉ tìm thấy kết quả
khớp đầu tiên:
'aab'.replace(/a/, '!'); // trả về '!ab'
Và bây giờ regex sẽ tìm thấy tất cả các kết quả khớp:
'aab'.replace(/a/g, '!'); // trả về '!!b'
Cho chuỗi:
let str = 'ahb acb aeb aeeb adcb axeb';
Viết regex tìm các chuỗi
'ahb', 'acb', 'aeb'
theo mẫu: chữ cái 'a', bất kỳ ký tự nào,
chữ cái 'b'.
Cho chuỗi:
let str = 'aba aca aea abba adca abea';
Viết regex tìm các chuỗi
'abba', 'adca', 'abea'
theo mẫu: chữ cái 'a', 2
ký tự bất kỳ, chữ cái 'a'.
Cho chuỗi:
let str = 'aba aca aea abba adca abea';
Viết regex tìm các chuỗi
'abba' và 'abea', mà không bắt
'adca'.