Regular Expressions
This post hasn't been updated for 8 years
Regular expressions là mô hình được sử dụng để phù hợp với kết hợp kí tự trong chuỗi. Trong JavaScript, biểu thức thông thường cũng là đối tượng. Những mô hình được sử dụng với các phương thức exec
và test
của Regex
và cùng với các phương thức math
, replace
, search
và split
của String
. Chương này mô tả JavaScript biểu thức thông thường.
Tạo mới một regular expression
Bạn có thể tạo mới một regular expression theo một trong hay cách sau
1. Đặt trong dấu gạch chéo
var re = /ab+c/
2. Gọi đến một hàm tạo mới của đối tượng RegExp
var re = new RegExp("ab+c")
Sử dụng hàm tạo mới mang đến việc biên dịch của regular expression. Sử dụng hàm tạo mới khi bạn biết regular expression pattern sẽ thay đổi hoặc bạn không biết parttern và nhận được từ một nguồn khác như thể là người dùng nhập vào
Viết một regular expression pattern
một regular expression pattern sẽ bao gồm các ký tự đơn giản như là /abc/
hoặc một sự kết hợp của các ký tự đơn giản và đặc biệt như là /ab*c/
hoặc (\d+)\.\d*/
Các ví dụ sau bao gồm dấu ngoặc được sử dụng như một bộ nhớ.
1. Sử dụng những pattern đơn giản
Những pattern đơn giản được tạo ra bởi những ký tự mà bạn muốn tìm kiếm sự phù hợp một cách trực tiếp. Ví dụ pattern /abc/ sự kết hợp của các ký tự phù hợp chỉ trong chuỗi string. Khi mà chính xác các ký tự abc xuất hiện cùng nhau và theo thứ tự. Giống như một sự phù hợp sẽ đúng trong 2 chuỗi string Hi, do you know your abc's?
và The latest airplane designs evolved from slabcraft
. Cả hai trường hợp đều chứ chuỗi subtring abc
2. Sử dụng những ký tự đặc biệt
Khi tìm kiếm một sự phù hợp đòi hỏi sự một sự phù hợp nhiều hơn một sự phù hợp trực tiếp, giống như việc tìm nhiều hơn một ký tự b hoặc tìm kiếm khoảng trắng, pattern bao gồm những ký tự đặc biệt. Ví dụ, pattern /ab*c/
phù hợp bất kỳ ký tự nào là sự kết hợp của một ký tự 'a' theo sau bởi khoảng trắng hay nhiều ký tự b(*
có nghĩa là 0 hoặc nhiều lần xuất hiện) và theo sau bởi c
. Trong chuỗi tring "cbbabbbbcdebc", pattern phù hợp là subtring 'abbbbc'.
Sau đây là những liệt kê danh sách đầy đủ và mô tả các ký tự đặc biệt có thể sử dụng trong regular expressions
-
^
: Phù hợp với những chuỗi string bắt đầu bằng ký tự đặt sau dấu ^. Nếu có nhiều dòng trong chuỗi string thì cũng phù hợp sau khi một character xuống dòng. Ví dụ, /^A/ không phù hợp với ký tự A trong "an A", nhưng phù hợp với ký tự 'A' trong "An E". Ký tự '^' có ý nghĩa khác nhau khi nó xuất hiện như là ký tự đầu tiên trong một ký tự pattern. -
$
: Phù hợp với những chuỗi string kết thúc bằng ký tự đặt sau dấu / không phù hợp với ký tự 't' trong chuỗi "eater", nhưng phù hợp trong chuỗi "eat" -
*
: Phù hợp với số lần xuất hiện là 0 hoặc nhiều. Tương đương với {0, } Ví dụ ,/bo*/
phù hợp với 'boooo' trong chuỗi "A ghost booooed" và 'b' trong chuỗi "A bird warbled" nhưng không phù hợp trong chuỗi "A goat grunted". -
+
: Phù hợp với sự xuất hiện ít nhất một lần trong chuỗi string. Tương tự với {1, } Ví dụ, /+a/ phù hợp với ký tự a trong chuỗi "candy" và tất cả ký tự a trong chuỗi, nhưng không có trong chuỗi "cndy" -
?
: Phù hợp với 0 hoặc 1 lần trong các ký tự đứng trước nó Ví dụ /e?le?/ phù hợp với 'el' trong 'angel' và 'le' trong "angle" và cũng là 'l' trong "oslo" -
.
(dấu chấm thập phân): phù hợp với bất kỳ một ký tự nào ngoại trừ ký tự xuống dòng Ví dụ, /.n/ phù hợp với 'an' và 'on' trong chuỗi "nay, an apple is on the tree" nhưng không phù hợp với 'nay' -
x|y
: Phù hợp với x hoặc y Ví dụ /green | red/ phù hợp với 'green' trong "green apple" và 'red' trong "red apple" -
{n}
: phù hợp với n lần xuất hiện của ký tự trong chuỗi, n phải là số nguyên dương Ví dụ, /a{2}/ không phù hợp với 'a' trong "candy", nhưng lại phù hợp với tất cả các 'a' trong "caandy" và 2 ký tự 'a' đầu tiên trong "caaandy" -
{n, m}
: n <= m và n,m phải là số nguyên dương. Phù hợp với tối thiểu n và tối đa m lần xuất hiện trong chuỗi ký tự. Khi không điền giá trị của m, thì m được xem là có giá trị ∞ Ví dụ, /a{1, 3}/ không phù hợp trong "cndy", nhưng lại phù hợp với 1 ký tự 'a' trong "candy", 2 ký tự 'a' trong "caandy" và 3 ký tự đầu tiên trong "caaaaaaaandy" -
\d
: Phù hợp với các ký tự số [0-9] Ví dụ, /\d/ hoặc /[0-9]/ phù hợp với '2' trong "B2 is the suite number" -
\D
: Phù hợp với các ký tự không phải số [^0-9] Ví dụ, /\D/ hoặc /[^0-9]/ phù hợp với 'B' trong "B2 is the suite number"
3. Sử dụng ngoặc
Ngoặc xung quanh bất kỳ phần nào của regular expression pattern có thể phù hợp với một chuỗi subtring
Ví dụ, các mô hình /Chapter (\d+)\.\d*/
giải thích việc thêm ký tự đặc biệt và chỉ ra rằng một phần của pattern nên được ghi nhớ. Nó phù hợp với các ký ký tự 'chapter' theo sau bởi một hoặc nhiều số (\d có nghĩa là bất kỳ ký tự số nào và + có nghĩa là 1 hoặc nhiều lần). Theo sau 1 dấu thập phân (bản thân nó là một ký tự đặc biệt, trước dấu chấm cùng với \ nghĩa là pattern phải tìm kiếm các ký tự '.'), theo sau bởi 0 hoặc nhiều ký tự số (\d có nghĩa là ký tự số, * có nghĩa là 0 lần hoặc nhiều lần)
Làm việc cùng regular expressions
Regular expressions được sử dụng cùng với các phương thức Regexp là test, exec và cùng với phương thức kiểm tra String là match, replace, search và split. Cụ thể như sau
exec
: Là một phương thức Regexp để xử lý việc tìm kiếm sự phù hợp trong 1 chuỗi ký tự. Kết quả trả về là một mảng các thông tin.
var myRe = /d(b+)d/g;
var myArray = myRe.exec("cdbbdbsbz");
test
: Là một phương thức Regexp để kiểm tra sự phù hợp trong một chuỗi ký tự. Kết quả trả về là đúng hoặc sai
var str = "hello world!";
var result = /^hello/.test(str);
console.log(result); // true
match
: Là một phương thức String để xử lý việc tìm kiếm sự phù hợp trong một chuỗi ký tự. Kết quả trả về là một mảng các ký tự hoặc là rỗng nếu không có kết quả phù hợp
var str = 'For more information, see Chapter 3.4.5.1';
var re = /(chapter \d+(\.\d)*)/i;
var found = str.match(re);
console.log(found);
// logs ['Chapter 3.4.5.1', 'Chapter 3.4.5.1', '.1']
search
: Là một phương thức String để xử lý việc tìm kiếm sự phù hợp trong một chuổi ký tự. Kết quả trả về là một index phù hợp hoặc -1 nếu tìm kiếm thất bại
var str = "Visit Schools!";
var n = str.search("Schools");
console.log(n);
replace
: Là một phương thức String để tìm kiếm các chuỗi phù hợp trong một chuỗi lớn và thay thế chuỗi phù hợp đấy bằng một chuỗi string khác
var str = 'Twas the night before Xmas...';
var newstr = str.replace(/xmas/i, 'Christmas');
console.log(newstr); // Twas the night before Christmas...
split
: Là một phương thức String sử dụng một regular expression hoặc một chuỗi cố định để cắt một chuỗi thành một mảng có nhiều phần tử
var names = 'Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ;Chris Hand';
console.log(names);
var re = /\s*;\s*/;
var nameList = names.split(re);
console.log(nameList);
Kết Luận
Nội dung phía trên được mình dịch ra từ bài viết về regular expressions https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
Rất mong nhận được sự đóng góp của các bạn để bài viết của mình có thể hoàn thiện hơn nữa
All Rights Reserved