Bạn đã bao giờ cảm thấy mệt mỏi khi phải xử lý một chuỗi ký tự hoặc đoạn văn bản trong khi lập trình hay chưa? Bạn đang tốn thời gian viết các đoạn code dài ngoằng, lặp đi, lặp lại chỉ để kiểm tra ô input có hợp lệ hay không? Đừng lo vì Regular Expression
sẽ là trợ thủ của bạn trong những trường hợp như này. Vậy Regular Expression
hay Regex
là gì? Cùng Vietnix tìm hiểu chi tiết ngay dưới bài viết dưới đây nhé!
Regex là gì?
Regex
(hay RegExp
hay RegExr
) là cụm từ viết tắt của Regular Expression
có nghĩa là biểu thức chính quy. Đây là một chuỗi các ký tự đặc biệt được định nghĩa để tạo nên các mẫu (pattern
). Chúng được sử dụng để phân tích cú pháp, sự trùng khớp, tìm kiếm, thay thế trong các chuỗi và đoạn ký tự.
Regex
sẽ được dùng trong hầu hết các ngôn ngữ lập trình hiện nay. Đây được xem là một công cụ đắc lực và vô cùng mạnh mẽ dùng để phân tích, validate dữ liệu đầu vào.
Ưu và nhược điểm của Regex
Cùng Vietnix tìm hiểu Ưu và nhược điểm của biểu thức quy chuẩn ở dưới đây nhé.
Ưu điểm
Vì các biểu thức chính quy có tác dụng để so khớp các dữ liệu đầu vào chi tiết và cụ thể hơn. Bạn có thể có thể kiểm tra, tìm lỗi và xử lý các tiện ích tìm kiếm các chuỗi từ người dùng nhập vào dựa vào những mẫu quy định sẵn. Chính vì đó nên ta có thể ràng buộc được những chi tiết các dữ liệu đầu vào nhanh chóng và chính xác.
Nhược điểm
Khó nắm bắt được vì nó khá trừu tượng và rắc rối. Regular expression
đòi hỏi bạn phải có một chút tư duy logic và sự tập trung. Vì nó được hỗ trợ bởi hầu hết các ngôn ngữ lập trình hiện. Tuy nhiên điểm hạn chế lại là mỗi ngôn ngữ lại được hỗ trợ với biểu thức cách khác nhau. Nếu không bạn có thể sẽ tạo ra biểu thức không khớp như kết quả mình muốn.
Các cú pháp cơ bản Regular Expression
Nguyên tắc vận hành chính của biểu thức Regex
là so khớp dựa vào mẫu. Mẫu sẽ được xây dựng từ những quy tắc căn bản của biểu thức.
Regex
mang đến rất nhiều các ứng dụng hữu ích khác nhau. Tuy nhiên, nếu nhìn chung thì nền tảng mà chuỗi các ký tự mô tả một bộ chuỗi các ký tự khác. Nhưng có một điều chắc chắn rằng, tất cả đều phải tuân theo một quy tắc và cú pháp nhất định.
Bạn có thể tham khảo và áp dụng các cú pháp cơ bản của Regular Expression
mà Vietnix đã tổng hợp dưới đây:
abcdef...
: Chữ.123...
: Số.\d
: Bất cứ số nào.\D
: Bất kì gì trừ số ra..
: Bất cứ ký tự nào.[abc]
: Chỉ được là a, b hoặc c.[^abc]
: Không được có a, b và c.[0-9]
: Số từ o đến 0.\w
: Bất cứ ký tự chữ nào.\W
: Bất kì gì trừ chữ ra.{m}
: Lặp lại m lần.{m, n}
: Lặp lại tối thiểu m lần và tối đa n lần.“^”
: Đây là ký tự bắt đầu của chuỗi nhập. Ví dụ ^A thì A chính là ký tự đầu tiên của chuỗi.“$”
: Đây là ký tự kết thúc chuỗi nhập. Ví dụ như $B thì B ở đây chính là ký tự cuối cùng của chuỗi.“.”
: Được dùng để chỉ bất kỳ cứ ký tự nào, tuy nhiên ký tự xuống dòng bị ngoại trừ.“*”
: Nếu ký tự này xuất hiện, bạn có thể hiểu rằng, các ký tự trước đó có thể lặp 0 hoặc nhiều lần. Ví dụ, “ri*t” thì bạn có thể ngầm hiểu là riit hoặc riiit, hoặc có thể là rt.“+”
: Khác với ký tự “** , khi ký tự này xuất hiện bạn ngầm hiểu ký tự trước đó có thể lặp 1 hoặc nhiều lần. Ví dụ, “ri+t” có thể là rit, riit, riiiit,…
Ứng dụng Regex
Regex
thường được ứng dụng với 2 mục đích chính, đó là:
- Kiểm tra tính hợp lệ của dữ liệu: Email, URL có hợp lệ không, kiểm tra số điện thoại Việt Nam. Hay kiểm tra độ dài của câu có nằm trong một khoảng (x, y),…
- Tìm kiếm và thay thế: bạn có thể
regex
với chưa đến 10 dòng code, file nhỏ mở text editor là xong và không cần đến code.
Cách tạo ra 1 Regular Expressions trong JS
Regex
trong javascript là một chuỗi nhưng không được bao quanh bởi cặp dấu nháy đơn ‘ hoặc nháy kép “. Mà nó là chuỗi được bao quanh bởi cặp dấu /. Có 2 để bạn có thể tạo ra, đó là:
Cú pháp: new RegExp(pattern<, flags>)
.
Ví dụ: var regexConst = new RegExp("abc")
; Hoặc có thể sử dụng dấu /
Cú pháp: /pattern/flags
.
Trong đó: pattern
là một chuỗi Regular Expression Flags
thông số cấu hình cho chuỗi pattern
và nó có tổng các giá trị. i
là so khớp không quan tâm đến chữ cái hoa hay chữ thường. g
là so khớp toàn bộ chuỗi cần tìm. Còn m
là so khớp luôn cả các dữ liệu xuống dòng (multiline).
Ví dụ: khi Pattern
kiểm tra chuỗi có tồn tại chữ “mbachulski.com” không thì sẽ không phân biệt giữa chữ hoa chữ thường. Nó sẽ quét và tìm toàn bộ tài liệu:
var pattern = /mbachulski.com/igm;pattern
là mbachulski.comflags
là igm
.
Cách viết Regex chi tiết
Regex
có những cách viết điển hình và được nhiều lập trình viên sử dụng. Bao gồm so khớp chuỗi, tách chuỗi, tìm kiếm trong chuỗi, thay thế chuỗi… Cách viết chi tiết bạn có thể tham khảo ngay dưới đây:
Sửa đổi biểu thức
Biểu thức | Ý nghĩa |
---|---|
i | Tìm kiếm không phân biệt chữ cái hoa hay chữ thường. |
m | Tìm kiếm nhiều dòng. |
u | Đối sánh chính xác các mẫu được mã hóa bởi UTF-8. |
Ký tự thường
Biểu thức | Ý nghĩa | Chú ý |
---|---|---|
a | b | Tìm ký tự khớp với a hoặc b | |
[0 – 9] | Tìm ký tự khớp với số từ 1 đến 9 | |
[a – z] | Khớp với những chữ từ a – z | |
[abc] | Có thể khớp với chữ a, b hoặc là c | |
[^abc] | Không khớp với a, b hoặc là c | Dấu ^ nếu xuất hiện sau dấu ngoặc vuông thì là có nghĩa là phủ định |
\d | Số bất kỳ | Thay thế cho [0-9] |
\D | Ký tự không phải là số | Thay thế [^0-9] |
\s | Ký tự khoảng trắng | |
\S | Không là ký tự của khoảng trắng | Thay thế [^\s] |
\w | Ký tự chữ | |
\W | Ký tự không phải chữ | Thay thế [^\w] |
\b | Ký tự thuộc a – z hoặc A – Z hoặc 0-9 hoặc là _ |
Ký tự đặc biệt
Biểu thức | Ý nghĩa |
---|---|
| | Tìm ra kết quả phù hợp cho bất kỳ một trong số các mẫu tương tự như or |
. | Chỉ tìm một trường hợp của bất kỳ ký tự nào và khớp với bất kỳ ký tự đơn nào ngoài \ |
^ | Tìm ra kết quả phù hợp ở đầu của một chuỗi |
$ | Tìm ra kết quả phù hợp ở cuối của chuỗi |
\d | Tìm một chữ số |
\s | Tìm một ký tự khoảng trắng |
\b | Tìm một kết quả phù hợp ở đầu một từ hoặc cuối một từ |
\uxxxx | Tìm ký tự unicode được chỉ định bởi số lục phân xxxx |
/ | Bắt đầu hoặc kết thúc chuỗi |
\ | Biểu diễn một ký tự ngay sau, từ ký tự đặc biệt thành ký tự thường và ngược lại |
Bộ định lượng
Biểu thức | Ý nghĩa |
---|---|
n+ | Khớp với bất kỳ chuỗi nào có chứa ít nhất một n |
n* | Khớp với bất kỳ chuỗi nào không có hay có nhiều lần xuất hiện của n |
n? | Khớp với bất kỳ chuỗi nào có chứa 0 hay 1 lần xuất hiện của n |
n{x} | Khớp với bất kỳ chuỗi nào chứa 1 chuỗi X n |
n{x,y} | Khớp với bất kỳ những chuỗi có chứa chuỗi X với chuỗi Y n |
n{x,} | Đối sánh bất kỳ những chuỗi có chứa ít nhất là 1 chuỗi gồm X n |
Khớp nhóm
Biểu thức | Ý nghĩa |
---|---|
() | Chọn ra các phần từ của mẫu được sử dụng để làm đối sánh |
(? : x) | Khớp với x nhưng không rõ chính xác kết quả khớp |
x(?=y) | Chỉ khớp được với x nếu như ngay sau x là y |
X(?!y) | Chỉ khớp được với x nếu ngay sau x không là y |
Câu hỏi thường gặp
Regex
ở trong Python là gì?
Regex
hay còn gọi là biểu thức chính quy, là một chuỗi các ký tự cấu thành một mẫu tìm kiếm. Regex
có thể được dùng để kiểm tra xem thử một chuỗi có chứa mẫu tìm kiếm được chỉ định hay không.
Regex
có phải là một ngôn ngữ lập trình không?
Regex
có các thuật ngữ, điều kiện và cú pháp riêng biệt, nhưng theo một nghĩa nào đó, nó cũng được coi là một ngôn ngữ lập trình nhỏ. Regex
có thể được dùng để thêm, xóa hoặc cô lập tất cả các loại văn bản và dữ liệu. Nó có thể được dùng như một lệnh soạn thảo văn bản đơn giản. Ví dụ như là tìm kiếm, thay thế hay là ngôn ngữ xử lí mạnh mẽ văn bản của nó.
Lời kết
Bên trên là những thông tin chi tiết về Regular Expressions
hay Regex
mà Vietnix đã tổng hợp và chia sẻ đến bạn. Hy vọng đã mang đến bạn cái nhìn rõ hơn về thuật ngữ này. Đừng quên theo dõi Vietnix để được cập nhật thêm nhiều thông tin và kiến thức bổ ích nhé! Cảm ơn bạn đã theo bài viết của chúng tôi.