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 match() đưa ra những so khớp khi so khớp một chuỗi (string) với biểu thức chính quy.

Cú pháp

str.match(regexp)

Tham số

regexp
Đối tượng biểu thức chính quy.  Nếu một đối tượng obj không phải biểu thức chính quy được truyền vào, nó sẽ ngầm chuyển đổi thành một RegExp bằng cách sử dụng new RegExp(obj). Nếu bạn không truyền tham số và sử dụng trực tiếp phương thức match(), bạn sẽ nhận lại một Array với một chuỗi rỗng: [""].

Giá trị trả về

Nếu một chuỗi khớp với biểu thức, nó sẽ trả lại một Array chứa chuỗi khớp hoàn toàn là phần tử đầu tiên, tiếp đó là các kết quả nằm trong dấu ngoặc đơn (ngoặc có nhớ). Nếu không có so khớp, nó sẽ trả về null.

Mô tả

Nếu một biểu thức chính quy không có cờ gstr.match() trả về kết quả giống như  RegExp.exec()Array trả về có thêm thuộc tính input chứa chuỗi ban đầu được phân tích ngữ pháp. Thêm nữa, nó có một thuộc tính index đại diện cho chỉ mục (tính từ 0) của so khớp trong chuỗi.

Nếu biểu thức chính quy có cờ g, phương thức trả về một Array chứa tất cả chuỗi con khớp mà không phải các đối tượng khớp. Nó không trả về chuỗi trong dấu ngoặc tròn có nhớ. Nếu không có so khớp, phương thức trả về null.

Xem thêm: Các phương thức RegEx

  • Trường hợp bạn cần biết liệu một chuỗi có khớp với biểu thức chính quy RegExp hay không, sử dụng RegExp.test().
  • Nếu chỉ muốn xem so khớp đầu tiên được tìm thấy, bạn sử dụng RegExp.exec().
  • Nếu bạn muốn lấy nhóm trong ngoặc có nhớ và xét cờ, bạn cần sử dụng RegExp.exec().

Ví dụ

Sử dụng match()

Trong ví dụ dưới đây, match() được dùng để tìm chuỗi 'Chapter ' theo sau là một hoặc nhiều kí tự số, tiếp đó là một dấu chấm . thập phân và một số lặp lại 0 hoặc nhiều lần. Biểu thức chính quy có cờ i nên không phân biệt chữ hoa và thường.

var str = 'For more information, see Chapter 3.4.5.1';
var re = /see (chapter \d+(\.\d)*)/i;
var found = str.match(re);

console.log(found);

// logs [ 'see Chapter 3.4.5.1',
//        'Chapter 3.4.5.1',
//        '.1',
//        index: 22,
//        input: 'For more information, see Chapter 3.4.5.1' ]

// 'see Chapter 3.4.5.1' là so khớp toàn bộ.
// 'Chapter 3.4.5.1' được bắt bởi '(chapter \d+(\.\d)*)'.
// '.1' là giá trị cuối cùng được bắt bởi '(\.\d)'.
// Thuộc tính 'index' (22) là chỉ mục tính từ 0 của so khớp toàn bộ.
// Thuộc tính 'input' là chuỗi gốc đã được phân tích ngữ pháp.

Sử dụng cờ toàn cục và cờ không phân biệt chữ hoa/thường với match()

Ví dụ dưới đây mô tả cách sử dụng cờ g và cờ i với match(). Tất cả chữ A tớ E và a tới e sẽ được trả lại và mỗi phần từ khớp nằm trong mảng.

var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);

console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']

Sử dụng match() không truyền tham số

var str = "Nothing will come of nothing.";

str.match();   //trả về [""]

Một đối tượng không phải biểu thức chính quy được coi như một tham số

Khi tham số là một chuỗi hoặc một số, ngầm định, nó được chuyển đổi thành một RegExp sử dụng new RegExp(obj). Nếu nó là một số dương với một dấu dương, phương thức Regexp() sẽ bỏ qua dấu dương.

var str1 = "NaN means not a number. Infinity contains -Infinity and +Infinity in JavaScript.",
    str2 = "My grandfather is 65 years old and My grandmother is 63 years old.",
    str3 = "The contract was declared null and void.";
str1.match("number");   // "number" là một chuỗi. Trả về ["number"]
str1.match(NaN);        // kiểu của NaN là kiểu number. Trả về ["NaN"]
str1.match(Infinity);   // kiểu của Infinity là number. Trả về ["Infinity"]
str1.match(+Infinity);  // Trả về ["Infinity"]
str1.match(-Infinity);  // Trả về ["-Infinity"]
str2.match(65);         // Trả về ["65"]
str2.match(+65);        // Một số với dấu dương. Trả về ["65"]
str3.match(null);       // Trả về ["null"]

Thông số

Thông số Trạng thái Bình luận
ECMAScript 3rd Edition (ECMA-262) Standard

Định nghĩa ban đầu. Được bổ sung trong JavaScript 1.2.

ECMAScript 5.1 (ECMA-262)
The definition of 'String.prototype.match' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.prototype.match' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'String.prototype.match' in that specification.
Draft  

Tương thích trình duyệt

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support Yes Yes1 Yes Yes Yes
flags No No1 — 49 No No No
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes4 Yes Yes Yes
flags No No No4 — 49 No No No

Lưu ý cho Firefox

  • các cờ flags từng không phải đối số thứ hai tiêu chuẩn, nó chỉ có hiệu lực trong Gecko: str.match(regexp, flags)
  • Bắt đầu từ Gecko 27 (Firefox 27 / Thunderbird 27 / SeaMonkey 2.24), phương thức này đã được điều chỉnh để phù hợp với ECMAScript. Khi match() được gọi với một biểu thức chính quy toàn cục, thuộc tính RegExp.lastIndex (nếu nó được chỉ định) sẽ được đưa về 0 (bug 501739).
  • Từ Gecko 39 (Firefox 39 / Thunderbird 39 / SeaMonkey 2.36), đối số flags không chuẩn  không được chấp nhận và sẽ có cảnh báo (bug 1142351) trên giao diện điều khiển.
  •  Từ Gecko 47 (Firefox 47 / Thunderbird 47 / SeaMonkey 2.44), đối số flags không chuẩn không còn được hỗ trợ trong các phiên bản chưa phát hành và sẽ sớm bị gỡ bỏ bug 1245801) hoàn toàn.
  • Từ Gecko 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46), đối số flags không chuẩn còn còn được hỗ trợ (bug 1108382).
  • Starting with Gecko 49 (Firefox 49 / Thunderbird 49 / SeaMonkey 2.46), the non-standard flags argument is no longer supported (bug 1108382).

Xem thêm

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,