JavaScript

Biểu thức chính quy (Regular Expressions) trong JavaScript

Biểu thức chính quy (Regular Expressions) trong JavaScript
Được viết bởi Minh Hoàng

Series lập trình JavaScript, ngôn ngữ lập trình linh động, thực thi phía client.

Biểu thức chính quy (Regular Expressions) trong JavaScript

Lớp JavaScript RegExp đại diện cho một biểu thức chính quy, cả String và RegExp đều định nghĩa các phương thức sử dụng các biểu thức chính quy để thực hiện các hàm kết hợp mẫu rất mạnh mẽ (powerful pattern-matching) từ đó xử lý tìm kiếm và thay thế văn bản.

1. Biểu thức chính quy (Regular Expression) là gì?

1. Biểu thức chính quy (Regular Expression) là gì?

Biểu thức chính quy là một chuỗi ký tự tạo thành mẫu tìm kiếm (search pattern).

– 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 muốn tìm kiếm.

– Biểu thức chính quy có thể là một ký tự đơn giản hoặc là 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 hành động tìm kiếm văn bản (text search) và thay thế văn bản (text replace).

1.1. Cú pháp
Syntax:
[code language=”javascript”]var patt = new RegExp(pattern, modifiers);

// Hoặc đơn giản hơn:

var patt = /pattern/modifiers;[/code]

– Trong đó:

  • /pattern/modifiers: là một biểu thức chính quy (Regular Expression)
  • pattern: là một chuỗi chỉ định mẫu tìm kiếm, dùng để search.
  • modifiers: là một modifier, là optional cụ thể cho việc tìm kiếm, có thể là i, g hoặc m (Chi tiết ý nghĩa như bên dưới)
1.2. Các modifiers của Regular Expression
Modifier Description Try it
i Thực hiện matching mà không phân biệt chữ hoa chữ thường (case-insensitive) Try it »
g Thực hiện matching global, tức là sẽ tìm kiếm tất cả kết quả matching với điều kiện search, chứ không dừng lại chỉ kết quả tìm thấy đầu tiên. Try it »
m Thực hiện matching multiline. Try it »
2. Regular Expression kết hợp với string methods: search() và replace()

2. Regular Expression kết hợp với string methods: search() và replace()

Trong JavaScript, các biểu thức chính quy thường được sử dụng với hai phương thức chuỗi: search()replace():

– Phương thức search() sử dụng một biểu thức để tìm kiếm một kết quả phù hợp và trả về vị trí match.

– Phương thức replace() trả về một chuỗi đã sửa đổi, nơi mẫu (pattern) được thay thế.

2.1. Về phương thức String search()
Sử dụng với String
Ví dụ:

Sử dụng một chuỗi để tìm kiếm “Minh” trong chuỗi:
[code language=”javascript”]var str = "Welcome to Minh Hoàng Blog!";
var pos = str.search("Minh"); // return 11[/code] Try it »

Sử dụng với Regular Expression
Ví dụ:

Sử dụng biểu thức chính quy để thực hiện tìm kiếm chuỗi “minh” không phân biệt chữ hoa chữ thường trong chuỗi:
[code language=”javascript”]var str = "Welcome to MINH HOÀNG BLOG!";
var pos = str.search(/minh/i); // return 11[/code] Try it »

2.2. Về phương thức String replace()

Phương thức replace() thay thế một giá trị được chỉ định bằng một giá trị khác trong một chuỗi:

Sử dụng với String
Ví dụ:
[code language=”javascript”]var str = "Welcome to Google!";
var res = str.replace("Google","MinhHN.Com");[/code] Try it »

Sử dụng với Regular Expression
Ví dụ:

Sử dụng biểu thức chính quy không phân biệt chữ hoa chữ thường để thay thế “GOOGLE” bằng “MinhHN.Com” trong một chuỗi:
[code language=”javascript”]var str = "Welcome to GOOGLE!";
var res = str.replace(/Google/i,"MinhHN.Com");[/code] Try it »

3. Một số pattern của biểu thức chính quy

3. Một số pattern của biểu thức chính quy

3.1. Brackets (Cặp dấu ngoặc vuông [])

Brackets được sử dụng để tìm một dải ký tự (a range of characters):

Expression Description Try it
[abc] Tìm tất cả ký tự có trong dấu ngoặc vuông. Try it »
[0-9] Tìm tất cả số có trong dấu ngoặc vuông. Try it »
(x|y) Tìm tất cả các giá trị chỉ định được phân tách bằng dấu | Try it »
3.2. Metacharacters

Metacharacters là các ký tự đặc biệt:

Metacharacter Description Try it
\d Tìm một số. Try it »
\s Tìm ký tự khoảng trắng (whitespace character). Try it »
\b Tìm nội dung phù hợp (match) với phần bắt đầu hoặc phần kết thúc của từ. Try it »
\uxxxx Tìm ký tự Unicode được chỉ định bởi số thập lục phân xxxx
( Xem thêm: Danh sách các ký tự Unicode )
Try it »
3.3. Quantifiers

Quantifiers là định lượng xác định số lượng:

Quantifier Description Try it
n+ Match với bất kỳ chuỗi nào chứa ít nhất một n hoặc nhiều n Try it »
n? Match với bất kỳ chuỗi nào chứa zero (0) hoặc một lần xuất hiện n Try it »
n* Match với bất kỳ chuỗi nào chứa zero (0) hoặc nhiều lần xuất hiện n Try it »
4. Đối tượng RegExp

4. Đối tượng RegExp

Trong JavaScript, một đối tượng RegExp là một đối tượng biểu thức chính quy với các thuộc tính và phương thức được xác định trước.

4.1. Phương thức test()

– Phương thức test() là một phương thức biểu thức RegExp.

– Nó tìm kiếm mẫu (pattern) trong chuỗi và trả về true hoặc false tùy thuộc vào kết quả.

– Ví dụ sau tìm kiếm “o“, “k” trong chuỗi:

  • Ở câu lệnh 1: vì có “o” trong chuỗi, nên kết quả sẽ là: true.
  • Ở câu lệnh 2: không có “k” trong chuỗi, nên kết quả là: false.
Ví dụ:
[code language=”javascript”]var patt = /o/;
patt.test("welcome to minh hoang blog!");

// Hoặc có thể viết gộp:
/k/.test("welcome to minh hoang blog!");[/code] Try it »

4.2. Phương thức exec()

– Phương thức exec() là một phương thức biểu thức RegExp.

– Nó tìm kiếm một chuỗi ký tự của mẫu được chỉ định và trả về văn bản đã tìm thấy. Nếu không tìm thấy kết quả phù hợp, null (empty string) sẽ được trả về.

– Ví dụ sau tìm kiếm “o“, “k” trong chuỗi:

  • Ở câu lệnh 1: vì có “o” trong chuỗi, nên kết quả trả về là: o.
  • Ở câu lệnh 2: không có “k” trong chuỗi, nên kết quả là: null (empty string).
Ví dụ:
[code language=”javascript”]var patt = /o/;
patt.exec("welcome to minh hoang blog!");

// Hoặc có thể viết gộp:
/k/.exec("welcome to minh hoang blog!");[/code] Try it »

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

Translate »