Regular Expression và RegExp trong JavaScript



Một Regular Expression là một đối tượng miêu tả một pattern của các ký tự.

Lớp JavaScript RegExp biểu diễn Regular Expression, và cả String và RegExp định nghĩa các phương thức mà sử dụng Regular Expression để thực hiện các hàm so khớp pattern và tìm kiếm-thay thế mạnh trên văn bản.

Cú pháp

Một Regular Expression có thể được định nghĩa với RegExp () constructor như sau:

var pattern = new RegExp(pattern, attributes);or simplyvar pattern = /pattern/attributes;

Miêu tả tham số:

  • pattern − Một chuỗi mà xác định pattern của Regular Expression hoặc Regular Expression khác.

  • attributes − Một chuỗi tùy chọn chứa bất kỳ thuộc tính "g", "i", và "m" mà xác định tương ứng Global, Không phân biệt kiểu chữ (case-insensitive), và nhiều so khớp (multiline matches)

Các dấu ngoặc vuông

Các dấu ngoặc vuông ([]) có một ý nghĩa đặc biệt khi được sử dụng trong Regular Expression. Chúng được sử dụng để tìm một dãy ký tự.

Expression Miêu tả
[...] Bất kỳ một ký tự nào trong dấu ngoặc vuông
[^...] Bất kỳ một ký tự nào không trong dấu ngoặc vuông
[0-9] Nó so khớp bất kỳ số thập phân nào từ 0 đến 9
[a-z] Nó so khớp bất kỳ ký tự chữ thường nào từ a đến z.
[A-Z] Nó so khớp bất kỳ ký tự chữ hoa nào từ A đến Z.
[a-Z] Nó so khớp bất kỳ ký tự nào từ chữ thường a đến chữ hoa Z.

Các dãy được chỉ ở trên là chung; bạn cũng có thể sử dụng dãy [0-3] để so khớp bất kỳ số thập phân nào từ 0 đến 3, hoặc dãy [b-v] để so khớp bất kỳ ký tự chữ thường nào từ b đến v.

Phép lượng hóa (Quantifier)

Tần số và vị trí của các dãy ký tự và các ký tự đơn được bao trong các dấu ngoặc có thể được biểu thị bởi một ký tự đặc biệt. Mỗi ký tự đặc biệt có một phần mở rộng riêng biệt. Các +, * … theo sau một dãy ký tự.

Expression Miêu tả
p+ Nó so khớp bất kỳ chuỗi nào chứa ít nhất một p.
p* Nó so khớp bất kỳ chuỗi nào chứa 0 hoặc nhiều p.
p? Nó so khớp bất kỳ chuỗi nào chứa 1 hoặc nhiều p
p{N} Nó so khớp bất kỳ chuỗi nào chứa một dãy có {N} p
p{2,3} Nó so khớp bất kỳ chuỗi nào chứa một dãy có 2 hoặc 3 p
p{2, } Nó so khớp bất kỳ chuỗi nào chứa một dãy có ít nhất 2 p
p$ Nó so khớp bất kỳ chuỗi nào kết thúc với p
^p Nó so khớp bất kỳ chuỗi nào bắt đầu bằng p

Ví dụ

Ví dụ sau giải thích chi tiết hơn về so khớp các ký tự.

Expression Miêu tả
[^a-zA-Z] Nó so khớp bất kỳ chuỗi nào không chứa bất kỳ ký tự từ a đến z và từ A đến Z.
p.p Nó so khớp bất kỳ chuỗi nào chứa p, được theo sau bởi bất kỳ ký tự nào, theo sau bởi một ký tự p khác.
^.{2}$ Nó so khớp bất kỳ chuỗi nào chứa chính xác 2 ký tự
(.*) Nó so khớp bất kỳ chuỗi nào trong thẻ .
p(hp)* Nó so khớp bất kỳ chuỗi nào chứa p được theo sau bởi 0 hoặc nhiều dãy hp.

Các ký tự Literal

Ký tự Miêu tả
Alphanumeric Chính nó
\0 Ký tự NUL (\u0000)
\t Tab (\u0009)
\n Dòng mới (\u000A)
\v Tab dọc (\u000B)
\f Form feed (\u000C)
\r Carriage return (\u000D)
\xnn Ký tự Latin được xác định bởi số thập lục phân nn; ví dụ: \x0A là như \n
\uxxxx Ký tự Unicode được xác định bởi số thập lục phân xxxx; ví dụ: \u0009 là \t
\cX Ký tự điều khiển ^X; Ví dụ: \cJ tương đương với ký tự dòng mới \n

Siêu ký tự (Metacharacter)

Một metacharacter đơn giản là một ký tự chữ cái được đặt trước bởi một dấu gạch chéo ngược mà thực hiện so khớp một ý nghĩa đặc biệt.

Ví dụ, bạn có thể tìm kiếm một lượng tiền lớn bởi sử dụng siêu ký tự '\d' là: /([\d]+)000/. Ở đây, \d sẽ tìm bất kỳ chuỗi ký tự số nào.

Bảng sau liệt kê một tập hợp các siêu ký tự mà có thể được sử dụng trong PERL Style Regular Expression.

Ký tự Miêu tả
. Một ký tự đơn
\s Một ký tự khoảng trống trắng (space, tab, dòng mới)
\S Không phải ký tự khoảng trống trắng
\d Một chữ số (0-9)
\D Không là chữ số
\w Một ký tự từ (a-z, A-Z, 0-9, _)
\W Không là một ký tự từ
[\b] Một literal backspace (trường hợp đặc biệt)
[aeiou] So khớp một ký tự đơn trong tập hợp đã cho
[^aeiou] So khớp một ký tự đơn bên ngoài tập hợp đã cho
(foo|bar|baz) So khớp bất kỳ các dãy thay đổi nhau đã cho

Lượng hóa (Modifier)

Một số lượng hóa là có sẵn mà có thể xác định cách bạn làm việc với regexp, như phân biệt kiểu chữ, tìm kiếm nhiều dòng, …

Modifier Miêu tả
i Thực hiện so khớp không phân biệt kiểu chữ (case-insensitive).
m Xác định nếu chuỗi có các ký tự newline (dòng mới) hoặc carriage return , toán tử ^ và $ sẽ so khớp với một giới hạn newline (dòng mới), thay vì một giới hạn chuỗi.
g Thực hiện so khớp Global, mà tìm tất cả các so khớp thay vì dừng lại sau so khớp đầu tiên.

Các thuộc tính của RegExp

Bảng dưới liệt kê các thuộc tính của đối tượng RegExp và miêu tả:

Thuộc tính Miêu tả
constructor Xác định hàm tạo prototype của đối tượng.
global Xác định nếu lượng hóa "g" được thiết lập
ignoreCase Xác định nếu lượng hóa "i" được thiết lập
lastIndex Chỉ mục tại đó bắt đầu so khớp mới
multiline Xác định nếu lượng hóa "m" được thiết lập
source Văn bản của pattern

Khi bạn vào link, chúng ta sẽ có một số ví dụ minh họa cho các thuộc tính của đối tượng RegExp.

Các phương thức của RegExp

Bảng dưới liệt kê các phương thức của đối tượng RegExp và miêu tả:

Phương thức Miêu tả
exec() Thực thi một tìm kiếm cho một so khớp trong tham số chuỗi của nó.
test() Kiểm tra một so khớp trong tham số chuỗi của nó.
toSource() Trả về một literal đối tượng biểu diễn đối tượng đã cho; bạn có thể sử dụng giá trị này để tạo đối tượng mới.
toString() Trả về một chuỗi biểu diễn đối tượng đã cho.

Khi bạn vào link, chúng ta sẽ có một số ví dụ minh họa cho các phương thức của đối tượng RegExp.

Các bài học JavaScript khác tại VietJack: