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 định nghĩa với RegExp () constructor

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

var pattern = new RegExp(pattern, attributes);

or simply

var 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ự.

ExpressionMiê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ự.

ExpressionMiê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
^pNó 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ự.

ExpressionMiê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.pNó 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ự
<b>(.*)</b>Nó so khớp bất kỳ chuỗi nào trong thẻ <b> và </b>.
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ả
AlphanumericChính nó
\0Ký tự NUL (\u0000)
\tTab (\u0009)
\nDòng mới (\u000A)
\vTab dọc (\u000B)
\fForm feed (\u000C)
\rCarriage return (\u000D)
\xnnKý tự Latin được xác định bởi số thập lục phân nn; ví dụ: \x0A là như \n
\uxxxxKý tự Unicode được xác định bởi số thập lục phân xxxx; ví dụ: \u0009 là \t
\cXKý 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
\sMột ký tự khoảng trống trắng (space, tab, dòng mới)
\SKhông phải ký tự khoảng trống trắng
\dMột chữ số (0-9)
\DKhông là chữ số
\wMột ký tự từ (a-z, A-Z, 0-9, _)
\WKhô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, …

ModifierMiêu tả
iThực hiện so khớp không phân biệt kiểu chữ (case-insensitive).
mXá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.
gThự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ínhMiêu tả
constructorXác định hàm tạo prototype của đối tượng.
globalXác định nếu lượng hóa "g" được thiết lập
ignoreCaseXác định nếu lượng hóa "i" được thiết lập
lastIndexChỉ mục tại đó bắt đầu so khớp mới
multilineXác định nếu lượng hóa "m" được thiết lập
sourceVăn bản của pattern

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ứcMiê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.

Bình luận