Một 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. Mẫu tìm kiếm có thể được sử dụng cho các hoạt động tìm kiếm văn bản và thay thế văn bản.
Khi bạn tìm kiếm dữ liệu trong văn bản, bạn có thể sử dụng mẫu tìm kiếm này để mô tả điều bạn đang tìm kiếm. Một 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 tìm kiếm và thay thế văn bản.
Các Bộ chỉnh sửa Chuỗi
Trong JavaScript, biểu thức chính quy thường được sử dụng với hai phương thức chuỗi: search() và replace().
Phương thức search() sử dụng một biểu thức để tìm kiếm một khớp, và trả về vị trí của khớp.
var dev = "Come check us out at devleague!!";
var x = dev.search(/devleague/i);
// x = 22
Phương thức replace() cũng sẽ chấp nhận một chuỗi làm đối số tìm kiếm
var dev = "Visit Manoa!";
var x = str.replace(/manoa/i, "Devleague");
// x = "Visit Devleague"
Các Bộ chỉnh sửa Biểu thức Chính quy
Các bộ chỉnh sửa có thể được sử dụng để thực hiện tìm kiếm không phân biệt chữ hoa chữ thường cho các tìm kiếm toàn cầu hơn
var devleague = /devleague/i; // Perform case insensitive matching (will find all matches 'devleague' regaurdless of case)
var devleague = /devleague/g; // Perform a global match (will find all matches rather than stopping after the first match)
var devleague = /devleague/m; // Perform multiline matching
Các Mẫu Biểu thức Chính quy
Dấu ngoặc vuông được sử dụng để tìm một phạm vi ký tự
[dev] //Find any of the characters between the brackets
[0-9] //Find any of the digits between the brackets
(x|y) //Find any of the alternatives separated with |
Meta-ký tự là các ký tự có ý nghĩa đặc biệt (tham khảo các nguồn bên dưới)
\d //Find a digit
\s //Find a whitespace character
\b //Find a match at the beginning or at the end of a word
Các bộ định lượng xác định số lượng
n+ //Matches any string that contains at least one n
n* //Matches any string that contains zero or more occurrences of n
n? //Matches any string that contains zero or one occurrences of n
Như một ví dụ nhỏ, nếu tôi muốn tìm tất cả văn bản bên trong các thẻ <h1>
trên trang html này…
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hey There~!!</title>
</head>
<body>
<header>
<span><h1>Hey There!!</h1></span>
<header>
<section>
<div>
<ul>
<li>
<h1>Hola</h1>
</li>
<li>
<h1>Hello!!</h1>
</li>
<li>
<h1>Kon ichiwa</h1>
</li>
<li>
<h1>Ni hao</h1>
</li>
</ul
</div>
</section
</body>
</html>
Mẫu biểu thức chính quy của tôi sẽ là (<[a-zA-Z0-9]+>)(.*)(<!--[a-zA-Z0-9]+-->)
.
Dấu ngoặc đơn bên ngoài khớp với tất cả các chữ cái a-z với cả viết hoa và số từ 0-9, với cú pháp html
. Và dấu ngoặc đơn bên trong sẽ khớp với tất cả các ký tự bên trong các thẻ khớp đó.
Sử dụng phương thức test()
Phương thức test() tìm kiếm một chuỗi để xác định mẫu, và trả về true hoặc false, tùy thuộc vào kết quả.
var devleague = /dev/i;
devleague.test("Devleague is the bee's knees!!") //Returns true because "dev" is included in the string and is case-insensitive.
Sử dụng phương thức exec()
Phương thức exec() tìm kiếm một chuỗi để xác định một mẫu cụ thể, và trả về văn bản tìm thấy. Nếu không tìm thấy khớp nào, nó sẽ trả về null.
/dev/.exec("I learned a lot at devleague this summer!"); //Returns 'dev' because it is included in the string.
Tài liệu về Biểu thức Chính quy
- http://regexr.com/
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
- https://regex101.com/
- https://www.debuggex.com/