RegExp.prototype.test()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Phương thức test() của các instance RegExp thực hiện tìm kiếm với biểu thức chính quy này để tìm kết quả khớp giữa biểu thức chính quy và một chuỗi được chỉ định. Trả về true nếu có kết quả khớp; false nếu không.

Các đối tượng RegExp trong JavaScript là stateful khi chúng có cờ global hoặc sticky được đặt (ví dụ: /foo/g hoặc /foo/y). Chúng lưu trữ lastIndex từ kết quả khớp trước. Sử dụng điều này nội bộ, test() có thể được dùng để lặp qua nhiều kết quả khớp trong một chuỗi văn bản (với các nhóm bắt).

Try it

const str = "table football";

const regex = /fo+/;
const globalRegex = /fo+/g;

console.log(regex.test(str));
// Expected output: true

console.log(globalRegex.lastIndex);
// Expected output: 0

console.log(globalRegex.test(str));
// Expected output: true

console.log(globalRegex.lastIndex);
// Expected output: 9

console.log(globalRegex.test(str));
// Expected output: false

Cú pháp

js
test(str)

Tham số

str

Chuỗi để khớp với biểu thức chính quy. Tất cả các giá trị được ép thành chuỗi, vì vậy bỏ qua nó hoặc truyền undefined sẽ khiến test() tìm kiếm chuỗi "undefined", đây hiếm khi là điều bạn muốn.

Giá trị trả về

true nếu có kết quả khớp giữa biểu thức chính quy và chuỗi str. Ngược lại, false.

Mô tả

Sử dụng test() bất cứ khi nào bạn muốn biết liệu một mẫu có được tìm thấy trong một chuỗi hay không. test() trả về một boolean, không giống như phương thức String.prototype.search() (trả về chỉ mục của kết quả khớp, hoặc -1 nếu không tìm thấy).

Để lấy thêm thông tin (nhưng thực thi chậm hơn), hãy sử dụng phương thức exec(). (Tương tự như phương thức String.prototype.match().)

Như với exec() (hoặc kết hợp với nó), test() được gọi nhiều lần trên cùng một instance biểu thức chính quy global sẽ tiến qua kết quả khớp trước đó.

Ví dụ

Sử dụng test()

Ví dụ này kiểm tra liệu "hello" có xuất hiện ở đầu chuỗi hay không, trả về kết quả boolean.

js
const str = "hello world!";
const result = /^hello/.test(str);

console.log(result); // true

Ví dụ sau ghi thông báo phụ thuộc vào sự thành công của kiểm tra:

js
function testInput(re, str) {
  const midString = re.test(str) ? "contains" : "does not contain";
  console.log(`${str} ${midString} ${re.source}`);
}

Sử dụng test() trên regex có cờ "global"

Khi regex có cờ global được đặt, test() sẽ tăng lastIndex của regex. (RegExp.prototype.exec() cũng tăng thuộc tính lastIndex.)

Các lần gọi tiếp theo đến test(str) sẽ tiếp tục tìm kiếm str bắt đầu từ lastIndex. Thuộc tính lastIndex sẽ tiếp tục tăng mỗi lần test() trả về true.

Note: Miễn là test() trả về true, lastIndex sẽ không đặt lại — ngay cả khi kiểm tra một chuỗi khác!

Khi test() trả về false, lastIndex của regex được gọi sẽ đặt lại về 0.

Ví dụ sau minh họa hành vi này:

js
const regex = /foo/g; // the "global" flag is set

// regex.lastIndex is at 0
regex.test("foo"); // true

// regex.lastIndex is now at 3
regex.test("foo"); // false

// regex.lastIndex is at 0
regex.test("barfoo"); // true

// regex.lastIndex is at 6
regex.test("foobar"); // false

// regex.lastIndex is at 0
regex.test("foobarfoo"); // true

// regex.lastIndex is at 3
regex.test("foobarfoo"); // true

// regex.lastIndex is at 9
regex.test("foobarfoo"); // false

// regex.lastIndex is at 0
// (...and so on)

Đặc tả kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# sec-regexp.prototype.test

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

Xem thêm