--- title: String.prototype.match() slug: Web/JavaScript/Reference/Global_Objects/String/match tags: - Biểu thức chính quy - Chuỗi - Phương Thức translation_of: Web/JavaScript/Reference/Global_Objects/String/match ---
{{JSRef}}
 

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 {{jsxref("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 {{jsxref("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 {{jsxref("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ề {{jsxref("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ư  {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}. {{jsxref("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 {{jsxref("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ề {{jsxref("null")}}.

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

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 {{jsxref("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
{{SpecName('ES3')}} {{Spec2('ES3')}}

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

{{SpecName('ES5.1', '#sec-15.5.4.10', 'String.prototype.match')}} {{Spec2('ES5.1')}}  
{{SpecName('ES6', '#sec-string.prototype.match', 'String.prototype.match')}} {{Spec2('ES6')}}  
{{SpecName('ESDraft', '#sec-string.prototype.match', 'String.prototype.match')}} {{Spec2('ESDraft')}}  

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

{{Compat("javascript.builtins.String.match")}}

Lưu ý cho Firefox

Xem thêm