Modifier: (?ims-ims:...)
Baseline
2025
Newly available
Since September 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Một modifier ghi đè các cài đặt flag trong một phần cụ thể của regular expression. Nó có thể được sử dụng để bật hoặc tắt các flags thay đổi ý nghĩa của một số phần tử cú pháp regex. Các flags này là i, m, và s.
Cú pháp
(?flags1:pattern)
(?flags1-flags2:pattern)
Note: JavaScript chỉ có dạng modifier "bounded", trong đó pattern được đặt bên trong nhóm modifier. Hầu hết các ngôn ngữ khác hỗ trợ modifiers có dạng "unbounded", trong đó modifier được áp dụng đến cuối nhóm chứa gần nhất.
Tham số
flags1Optional-
Một chuỗi các flags cần bật. Có thể chứa bất kỳ kết hợp nào của
i,m, vàs. flags2Optional-
Một chuỗi các flags cần tắt. Có thể chứa bất kỳ kết hợp nào của
i,m, vàs, nhưng không được chứa bất kỳ flags nào có trongflags1. pattern-
Một pattern bao gồm bất cứ thứ gì bạn có thể sử dụng trong một regex literal, bao gồm cả disjunction.
Mô tả
Một số flags thay đổi ý nghĩa của các phần tử cú pháp regex:
- Flag
ilàm cho regex không phân biệt hoa/thường bằng cách làm cho tất cả literal characters và character classes ngầm định là chữ thường. - Flag
mthay đổi hành vi của input boundary assertions^và$để khớp với đầu và cuối của mỗi dòng, ngoài đầu và cuối của chuỗi đầu vào. - Flag
sthay đổi hành vi của ký tự wildcard.để khớp bất kỳ ký tự nào, bao gồm cả ký tự kết thúc dòng.
Đôi khi bạn muốn những thay đổi này chỉ có hiệu lực trong một phần cụ thể của một regex pattern. Bạn có thể làm như vậy bằng cách bao bọc phần đó trong một modifier. Ví dụ:
/(?i:Hello) world/;
Trong regex này, flag i chỉ được bật cho phần Hello của pattern. Phần world phân biệt hoa/thường. Do đó, nó khớp Hello world, hello world, và HELLO world, nhưng không phải HELLO WORLD. Đoạn sau tương đương, bằng cách bật flag i toàn cục, và sau đó tắt nó cho phần world:
/Hello (?-i:world)/i;
Các tham số flags1 và flags2 có thể chứa bất kỳ kết hợp nào của i, m, và s. Tuy nhiên, các flags phải là duy nhất giữa flags1 và flags2—bạn không thể bật hoặc tắt một flag hai lần, hoặc bật một flag và sau đó ngay lập tức tắt nó.
Các tham số flags1 và flags2 là tùy chọn, nhưng ít nhất một phải không rỗng. (?flags1-:pattern) là một modifier chỉ bật flags (tương đương với (?flags1:pattern)). (?-flags2:pattern) là một modifier chỉ tắt flags. (?:pattern) chỉ là một non-capturing group, và (?-:pattern) là lỗi cú pháp.
Các flags khác không có ý nghĩa trong một modifier và do đó là lỗi cú pháp nếu được bao gồm:
- Các flags
gvàyxác định cách các lần gọi nhiều lần đếnexec()hoạt động và ảnh hưởng đến hành vi khớp của toàn bộ regex. - Flag
dbật thông tin bổ sung trong kết quảexec()và ảnh hưởng đến hành vi khớp của toàn bộ regex. - Các flags
uvàvthay đổi hành vi của regex engine theo cách quá phức tạp để được sửa đổi cục bộ. Chúng cũng có các hiệu ứng toàn cục trên regex, chẳng hạn như cáchlastIndexđược tiến.
Ví dụ
>Chỉ khớp định dạng đa dòng ở đầu chuỗi
Regex sau định nghĩa một định dạng cho một chuỗi đa dòng. ^ đầu tiên đại diện cho đầu của toàn bộ chuỗi đầu vào, bằng cách nằm trong modifier (?-m:), trong khi tất cả các ký tự ^ khác đại diện cho đầu của một dòng:
const pattern = /(?-m:^)---\n^title:.*^slug:.*^---/ms;
const input = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;
pattern.test(input); // true
// Extra line break at the start of string
const input2 = `\n${input}`;
pattern.test(input2); // false
Khớp một số từ không phân biệt hoa/thường
Hãy tưởng tượng bạn đang tìm tất cả các khai báo biến được gọi là foo hoặc bar (vì chúng là các tên xấu). Từ có thể xuất hiện ở bất kỳ chữ hoa/thường nào, nhưng bạn biết từ khóa luôn là chữ thường, vì vậy bạn có thể làm điều này:
const pattern = /(?:var|let|const) (?i:foo|bar)\b/;
pattern.test("let foo;"); // true
pattern.test("const BAR = 1;"); // true
pattern.test("Let foo be a number"); // false
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # prod-RegularExpressionModifiers> |