From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../global_objects/regexp/exec/index.html | 194 +++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 files/vi/web/javascript/reference/global_objects/regexp/exec/index.html (limited to 'files/vi/web/javascript/reference/global_objects/regexp/exec') diff --git a/files/vi/web/javascript/reference/global_objects/regexp/exec/index.html b/files/vi/web/javascript/reference/global_objects/regexp/exec/index.html new file mode 100644 index 0000000000..9fdf5c193e --- /dev/null +++ b/files/vi/web/javascript/reference/global_objects/regexp/exec/index.html @@ -0,0 +1,194 @@ +--- +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ượngThuộc tính/Chỉ mụcMô 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
inputChuỗi ban đầu.The Quick Brown Fox Jumps Over The Lazy Dog
relastIndex +

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
ignoreCaseXá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
globalXác định liệu cờ "g" (so khớp toàn cục) có được sử dụng hay không.true
multilineXác định xem cờ "m" (tìm kiếm chuỗi đa dòng) có được sử dụng hay không.false
sourcemẫ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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{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

+ + -- cgit v1.2.3-54-g00ecf