--- title: RegExp.prototype.exec() slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec tags: - Biểu thức chính quy - Phương Thức - Tham khảo translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec ---
{{JSRef}}

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 {{jsxref("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 {{jsxref("RegExp.prototype.test()")}} hoặc phương thức {{jsxref("String.prototype.search()")}}.

{{EmbedInteractiveExample("pages/js/regexp-prototype-exec.html")}}

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ề  {{jsxref("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 {{jsxref("RegExp.lastIndex", "lastIndex")}} của biểu thức chính quy. ({{jsxref("RegExp.prototype.test()", "test()")}} cũng sẽ tăng tới thuộc tính {{jsxref("RegExp.lastIndex", "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 {{jsxref("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 {{jsxref("RegExp.lastIndex", "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 {{jsxref("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
{{SpecName('ES3')}} {{Spec2('ES3')}} Initial definition. Implemented in JavaScript 1.2.
{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}} {{Spec2('ES5.1')}}  
{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}} {{Spec2('ES6')}}  
{{SpecName('ESDraft', '#sec-regexp.prototype.exec', 'RegExp.exec')}} {{Spec2('ESDraft')}}  

Browser compatibility

{{Compat("javascript.builtins.RegExp.exec")}}

See also