--- 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 ---
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.
str.match(regexp)
regexp
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: [""].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")}}.
Nếu một biểu thức chính quy không có cờ g
, str.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")}}.
RegEx
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.
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']
match()
không truyền tham sốvar str = "Nothing will come of nothing."; str.match(); //trả về [""]
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ố | 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')}} |
Bảng tương thích trong trang này được tạo ra từ dữ liệu cấu trúc. Nếu bạn muốn đóng góp vào dữ liệu, hãy kiểm tra https://github.com/mdn/browser-compat-data và gửi một yêu cầu pull tới chúng tôi.
{{Compat("javascript.builtins.String.match")}}
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)match()
được gọi với một biểu thức chính quy toàn cục, thuộc tính {{jsxref("RegExp.lastIndex")}} (nếu nó được chỉ định) sẽ được đưa về 0
({{bug(501739)}}).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.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.flags
không chuẩn còn còn được hỗ trợ ({{bug(1108382)}}).flags
argument is no longer supported ({{bug(1108382)}}).