Biểu thức chính quy trong JavaScript

Tram Ho

Giới thiệu

  • Regular Expression (biểu thức chính quy) là một chuỗi các ký tự tạo thành một mẫu tìm kiếm.
  • Khi bạn tìm kiếm dữ liệu trong một văn bản, bạn có thể sử dụng mẫu tìm kiếm này để mô tả những gì bạn đang tìm kiếm.
  • Biểu thức chính quy có thể là một ký tự đơn hoặc một mẫu phức tạp hơn.
  • Biểu thức chính quy có thể được sử dụng để thực hiện tất cả các loại hoạt động tìm kiếm văn bản và thay thế văn bản .

Nội dung

Kí hiệu chữ và hàm tạo

  • Có hai cách để tạo một biểu thức chính quy: một kí hiệu chữ và một phương thức khởi tạo.
    • Các tham số của ký hiệu chữ được đặt giữa các dấu gạch chéo và không sử dụng dấu ngoặc kép.
    • Các tham số của hàm tạo không được đặt giữa các dấu gạch chéo nhưng sử dụng dấu ngoặc kép.
  • Ba biểu thức sau tạo cùng một đối tượng biểu thức chính quy:

  • Ký hiệu chữ dẫn đến việc biên dịch biểu thức chính quy khi biểu thức được đánh giá. Sử dụng ký hiệu chữ khi biểu thức chính quy sẽ không đổi. Ví dụ: nếu bạn sử dụng ký hiệu chữ để tạo một biểu thức chính quy được sử dụng trong một vòng lặp, biểu thức chính quy sẽ không cần biên dịch lại trên mỗi lần lặp.
  • Phương thức khởi tạo của đối tượng biểu thức chính quy — ví dụ — new RegExp(‘ab+c’) — kết quả trong quá trình biên dịch biểu thức chính quy trong thời gian chạy. Sử dụng hàm khởi tạo khi bạn biết mẫu biểu thức chính quy sẽ thay đổi hoặc bạn không biết mẫu và lấy nó từ một nguồn khác, chẳng hạn như đầu vào của người dùng.
  • Ở bài viết này tôi sẽ tập trung giới thiệu biểu thức chính quy dạng kí hiệu chữ. Ví dụ:

trong đó schools là mẫu (được sử dụng để search), còn i là một kí tự bổ nghĩa (để search không phân biệt chữ hoa-thường)

Phương thức search()

  • Phương thức search() tìm kiếm một chuỗi (biểu thức chính quy) cho một giá trị nhất định và trả về vị trí tìm thấy:
  • Ví dụ search() truyền vào một chuỗi

  • Ví dụ search() sử dụng biểu thức chính quy:

Các bạn có thể thấy với bổ ngữ i (search không phân biệt hoa-thường) nên vẫn có thể trả về giá trị chính xác.

Phương thức replace()

  • Trả về một chuỗi mới với các chuỗi khớp với biểu thức chính quy được thay thế bằng chuỗi truyền vào. Nếu pattern truyền vào là một chuỗi thì chỉ lần xuất hiện đầu tiên được thay thế.
  • Ví dụ replace() với pattern là một chuỗi:

  • Ví dụ replace() với pattern là một biểu thức chính quy:

  • Ví dụ thay thế tất cả sự xuất hiện của regex:

Bổ ngữ (gi) là thay thế tất cả các lần xuất hiện trùng khớp biểu thức chính quy không phân biệt chữ hoa-thường.

Sử dụng biểu thức chính quy để chia văn bản kết thúc dòng với CRLF

  • Kết thúc dòng mặc định khác nhau tùy thuộc vào nền tảng (Unix, Windows, v.v.). Tính năng tách dòng được cung cấp trong ví dụ này hoạt động trên tất cả các nền tảng.

  • Ngoài bổ ngữ g và i, ta còn một bổ ngữ m:

Kí hiệu (^) đối chiếu bất kì chuỗi nào có is ở đầu, (m) là thực hiện đối chiếu trên nhiều dòng (ở đây là kí tự n)

Một số mẫu biểu thức chính quy

Đặt trong cặp dấu ngoặc

  • Dấu ngoặc được sử dụng để tìm một loạt các kí tự:
Biểu thứcMô tả
[abc]Tìm bất kì kí tự nào nằm trong cặp dấu ngoặc
[^abc]Không tìm bất kì kí tự nào nằm trong cặp dấu ngoặc
[0-9]Tìm bất kì chữ số nào từ 0 đến 9
[^0-9]Không tìm bất kì chữ số nào từ 0 đến 9
(x|y)Trả về kí tự khớp chuỗi x hoặc y
  • Với [abc]:

  • Với [^abc] thì như trên sẽ trả về các kí tự còn lại.
  • Với [0-9]:

  • Với (x|y):

Trường hợp này có thể thấy các chuỗi khớp trả về đúng chuỗi mà nó tìm thấy.

Metacharacters

  • Metacharacters là các kí tự với ý nghĩa đặc biệt khi đi sau kí tự ():
MetacharacterMô tả
.Tìm một kí tự đơn ngoại trừ kí tự CRLF
wTìm kí tự từ a-z, A-Z, 0-9, kể cả _
WTìm kí tự khác a-z, A-Z, 0-9, _ (không gồm khoảng trắng)
dTìm kí tự là chữ số
DTìm kí tự không phải là chữ số
sTìm kí tự là khoảng trắng bao gồm dấu cách, dấu tab, CRLF
STìm kí tự không phải là khoảng trắng
bTìm ở đầu hoặc ở cuối của một từ như bắt đầu với: bLO, kết thúc là LOb
BTìm nhưng không ở đầu hoặc ở cuối của một từ như không bắt đầu với: BLO, không kết thúc là LOB
Tìm kí tự NULL
nTìm kí tự newline (hệ Unix)
fTìm kí tự form feed
rTìm kí tự carriage return (hệ MacOS)
tTìm kí tự tab
  • Với (.):

  • Với w:

  • Với W:

  • Với d:

  • Với s:

  • Với b:

  • Với B:

Bộ định lượng

QuantifierMô tả
n+Khớp với bất kì chuỗi nào chứa ít nhất 1 kí tự n
n*Khớp với bất kì chuỗi nào chứa không hoặc nhiều lần xuất hiện kí tự n
n?Khớp với bất kì chuỗi nào chứa không hoặc đúng một lần xuất hiện kí tự n
n{X}Khớp với bất kì chuỗi nào bao gồm X lần nối tiếp của n
n{X,Y}Khớp với bất kì chuỗi nào bao gồm X đến Y lần nối tiếp của n
n{X,}Khớp với bất kì chuỗi nào bao gồm ít nhất X lần nối tiếp của n
n$Khớp với chuỗi kết thúc bằng từ n
^nKhớp với chuỗi bắt đầu bằng từ n
?=nKhớp với bất kì chuỗi nào theo sau bởi chuỗi chỉ định n
?!nKhớp với bất kì chuỗi nào không theo sau bởi chuỗi chỉ định n
  • Với n+:

  • Với n*:

  • Với n?:

  • Với n{X}:

  • Với n$:

Thay vì tìm từng từ chứa is trong chuỗi thì chuỗi sẽ trỏ ngay đến vị trí cuối cùng để check xem có phải kết thúc là is hay không.

  • Với ?=n:

Kết luận

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo