Input boundary assertion: ^, $
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.
Một input boundary assertion kiểm tra xem vị trí hiện tại trong chuỗi có phải là ranh giới đầu vào không. Ranh giới đầu vào là đầu hoặc cuối của chuỗi; hoặc, nếu flag m được đặt, đầu hoặc cuối của một dòng.
Cú pháp
^
$
Mô tả
^ xác nhận rằng vị trí hiện tại là đầu của đầu vào. $ xác nhận rằng vị trí hiện tại là cuối của đầu vào. Cả hai đều là assertions, vì vậy chúng không tiêu thụ bất kỳ ký tự nào.
Chính xác hơn, ^ xác nhận rằng ký tự ở bên trái vượt ra ngoài giới hạn của chuỗi; $ xác nhận rằng ký tự ở bên phải vượt ra ngoài giới hạn của chuỗi. Nếu flag m được đặt, ^ cũng khớp nếu ký tự ở bên trái là ký tự kết thúc dòng, và $ cũng khớp nếu ký tự ở bên phải là ký tự kết thúc dòng.
Trừ khi flag m được đặt, các assertions ^ và $ chỉ có ý nghĩa khi được đặt ở ranh giới của pattern, vì bất kỳ ký tự nào khác ở bên trái hoặc bên phải của chúng chắc chắn sẽ khiến assertion thất bại.
Flag y không thay đổi ý nghĩa của các assertions này — xem thêm anchored sticky flag.
Ví dụ
>Xóa dấu gạch chéo ở cuối
Ví dụ sau xóa các dấu gạch chéo ở cuối từ một URL string:
function removeTrailingSlash(url) {
return url.replace(/\/$/, "");
}
removeTrailingSlash("https://example.com/"); // "https://example.com"
removeTrailingSlash("https://example.com/docs/"); // "https://example.com/docs"
Khớp phần mở rộng file
Ví dụ sau kiểm tra các loại file bằng cách khớp phần mở rộng file, luôn nằm ở cuối chuỗi:
function isImage(filename) {
return /\.(?:png|jpe?g|webp|avif|gif)$/i.test(filename);
}
isImage("image.png"); // true
isImage("image.jpg"); // true
isImage("image.pdf"); // false
Khớp toàn bộ đầu vào
Đôi khi bạn muốn đảm bảo rằng regex của bạn khớp toàn bộ đầu vào, không chỉ một chuỗi con của đầu vào. Ví dụ, nếu bạn xác định xem một chuỗi có phải là identifier hợp lệ không, bạn có thể thêm các input boundary assertions vào cả hai đầu của pattern:
function isValidIdentifier(str) {
return /^[$_\p{ID_Start}][$_\p{ID_Continue}]*$/u.test(str);
}
isValidIdentifier("foo"); // true
isValidIdentifier("$1"); // true
isValidIdentifier("1foo"); // false
isValidIdentifier(" foo "); // false
Hàm này hữu ích khi thực hiện codegen (tạo mã bằng mã), vì bạn có thể sử dụng các identifier hợp lệ khác với các thuộc tính chuỗi khác, chẳng hạn như dot notation thay vì bracket notation:
const variables = ["foo", "foo:bar", " foo "];
function toAssignment(key) {
if (isValidIdentifier(key)) {
return `globalThis.${key} = undefined;`;
}
// JSON.stringify() escapes quotes and other special characters
return `globalThis[${JSON.stringify(key)}] = undefined;`;
}
const statements = variables.map(toAssignment).join("\n");
console.log(statements);
// globalThis.foo = undefined;
// globalThis["foo:bar"] = undefined;
// globalThis[" foo "] = undefined;
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # prod-Assertion> |