Câu trả lời:
g
dành cho tìm kiếm toàn cầu. Có nghĩa là nó sẽ khớp với tất cả các lần xuất hiện. Bạn cũng sẽ thường thấy i
điều này có nghĩa là bỏ qua trường hợp.
Tham khảo: global - JavaScript | MDN
Cờ "g" chỉ ra rằng biểu thức chính quy phải được kiểm tra với tất cả các kết quả phù hợp có thể có trong một chuỗi.
Nếu không có g
cờ, nó sẽ chỉ thử nghiệm cho người đầu tiên.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
là lá cờ tìm kiếm toàn cầu.
Cờ tìm kiếm toàn cục làm cho RegExp tìm kiếm một mẫu trong suốt chuỗi, tạo ra một mảng tất cả các lần xuất hiện mà nó có thể tìm thấy khớp với mẫu đã cho.
Vì vậy, sự khác biệt giữa /.+/g
và /.+/
là g
phiên bản sẽ tìm thấy mọi lần xuất hiện thay vì chỉ lần đầu tiên.
Như @matiska đã chỉ ra, g
cờ cũng đặt thuộc lastIndex
tính.
Một tác dụng phụ rất quan trọng của điều này là nếu bạn đang sử dụng lại cùng một phiên bản regex với một chuỗi phù hợp, thì cuối cùng nó sẽ không thành công vì nó chỉ bắt đầu tìm kiếm tại lastIndex
.
// regular regex
const regex = /foo/;
// same regex with global flag
const regexG = /foo/g;
const str = " foo foo foo ";
const test = (r) => console.log(
r,
r.lastIndex,
r.test(str),
r.lastIndex
);
// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);
// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);
Bên cạnh ý nghĩa đã được đề cập của g
cờ, nó ảnh hưởng đến regexp.lastIndex
tài sản:
LastIndex là một thuộc tính số nguyên đọc / ghi của các phiên bản biểu thức chính quy chỉ định chỉ mục để bắt đầu trận đấu tiếp theo. (...) Thuộc tính này chỉ được đặt nếu phiên bản biểu thức chính quy sử dụng cờ "g" để biểu thị tìm kiếm toàn cục.
Tham khảo: Mạng nhà phát triển Mozilla
G trong biểu thức chính quy là một định nghĩa tìm kiếm toàn cục, có nghĩa là nó sẽ tìm kiếm tất cả các trường hợp trên tất cả các dòng.
g
->
trả về tất cả các trận đấuwithout g
->
trả về trận đấu đầu tiênthí dụ:
'1 2 1 5 6 7'.match(/\d+/)
lợi nhuận ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Như bạn thấy, chúng tôi chỉ có thể thực hiện trận đấu đầu tiên "1"
.'1 2 1 5 6 7'.match(/\d+/g)
trả về một mảng của tất cả các kết quả phù hợp ["1", "2", "1", "5", "6", "7"]
.