Bản dịch này chưa hoàn thành. Xin hãy giúp dịch bài viết này từ tiếng Anh.

Phương thức exec() tiến hành tìm kiếm một so khớp trong một chuỗi xác định. Trả về một mảng kết quả hoặc null.

Nếu bạn đơn giản chỉ muốn xác định có khớp hay không, tức kết quả trả về là true hoặc false, bạn nên sử dụng phương thức RegExp.prototype.test() hoặc phương thức String.prototype.search().

Cú pháp

regexObj.exec(str)

Tham số

str
Chuỗi dùng để so khớp với biểu thức chính quy.

Giá trị trả về

Nếu so khớp thành công, phương thức exec() trả về một mảng và cập nhật các thuộc tính của đối tượng biểu thức chính quy. Mảng trả về item đầu tiên là đoạn text khớp, và các item tiếp theo là giá trị trong các dấu ngoặc tròn có nhớ đã khớp.

Nếu việc so khớp thất bại, exec() trả về  null.

Mô tả

Hãy xem xét ví dụ sau:

// So khớp "quick brown" theo sau bởi "jumps", bỏ qua các kí tự ở giữa
// Nhớ "brown" và "jumps"
// Không phân biệt chữ hoa/thường
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');

Bảng dưới đây là kết quả trả về của so khớp trên.

Đối tượng Thuộc tính/Chỉ mục Mô tả Ví dụ
result [0] Chuỗi đầy đủ của các kí tự đã khớp. Quick Brown Fox Jumps
[1], ...[n ]

Các chuỗi con khớp được đặt trong ngoặc, nếu có. Số lượng ngoặc không giới hạn.

[1] = Brown
[2] = Jumps
index

Chỉ mục (tính từ 0) của bản khớp trong chuỗi.

4
input Chuỗi ban đầu. The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex

Chỉ mục bắt đầu tìm so khớp tiếp theo. Khi không có cờ "g" thì chỉ mục sẽ trở về 0.

25
ignoreCase Xác định xem liệu cờ "i" (không phân biệt chữ hoa/thường) được sử dụng hay không. true
global Xác định liệu cờ "g" (so khớp toàn cục) có được sử dụng hay không. true
multiline Xác định xem cờ "m" (tìm kiếm chuỗi đa dòng) có được sử dụng hay không. false
source mẫu dùng để so khớp. quick\s(brown).+?(jumps)

Ví dụ

Tìm các so khớp tiếp theo

Nếu biểu thức chính quy của bạn sử dụng cờ g, bạn có thể dùng phương thức exec() nhiều lần để tìm các so khớp tiếp theo trong chuỗi giống vậy. Lúc đó, việc tìm kếu bắt đầu từ chuỗi con của str đã được chỉ định bởi thuộc tính lastIndex của biểu thức chính quy. (test() cũng sẽ tăng tới thuộc tính lastIndex property. Ví dụ, giả sử bạn có kịch bản:

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = 'Found ' + myArray[0] + '. ';
  msg += 'Next match starts at ' + myRe.lastIndex;
  console.log(msg);
}

Kịch bản này hiển thị văn bản sau:

Found abb. Next match starts at 3
Found ab. Next match starts at 9

Chú ý: Đừng đặt biểu thức chính quy thuần (hoặc cấu trúc RegExp) bên trong điều kiện while hoặc nó sẽ tạo ra một vòng lặp vĩnh cửu nếu có một so khớp vì thuộc tính lastIndex sẽ reset lại sau mỗi vòng lặp. Và hãy chắc rằng cờ toàn cùng được xét nếu không một vòng lặp sẽ xảy ra.

Sử dụng exec() với RegExp thuần

Bạn có thể sử dụng exec() mà không cần tạo đối tượng RegExp:

var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);

Kịch bản này sẽ ghi ra lời nhắn chứa 'hello world!'.

Specifications

Specification Status Comment
ECMAScript 3rd Edition (ECMA-262) Standard Initial definition. Implemented in JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
The definition of 'RegExp.exec' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'RegExp.exec' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'RegExp.exec' in that specification.
Draft  

Browser compatibility

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes1 Yes Yes Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes4 Yes Yes Yes

See also

Document Tags and Contributors

Những người đóng góp cho trang này: Ozu
Cập nhật lần cuối bởi: Ozu,