Nếu regex của bạn là toàn cầu và bạn đang nắm bắt, thì bạn phải sử dụng tệp thi hành. Đối sánh sẽ không trả lại tất cả ảnh chụp của bạn.
Đối sánh hoạt động tốt khi chỉ khớp (không chụp). Bạn chạy nó một lần và nó cung cấp một loạt các kết quả phù hợp. (mặc dù nếu regex không phải là toàn cục, thì đối sánh sẽ hiển thị đối sánh sau đó là các lần chụp)
Exec là những gì bạn sử dụng khi chụp và mỗi lần thực thi nó sẽ cho kết quả khớp, sau đó là các lần chụp. (trận đấu sẽ hoạt động theo cách cung cấp kết quả khớp đầy đủ sau đó là các lần chụp, chỉ khi regex không phải là toàn cục).
Một cách sử dụng khác với Exec, là lấy chỉ số hoặc vị trí của một trận đấu. Khi bạn có một biến cho regex của mình, bạn có thể sử dụng .lastIndex và nhận vị trí của khớp. Đối tượng regex có .lastIndex và đối tượng regex là những gì bạn làm .exec trên. Đối sánh dấu chấm được thực hiện trên một chuỗi và bạn sẽ không thể thực hiện đối tượng regex chấm lastIndex
Một chuỗi, có hàm đối sánh, được chuyển qua một regex. Và một regex, có hàm thực thi và được truyền vào một chuỗi
thực thi bạn chạy nhiều lần. phù hợp với bạn chạy một lần
Thật tốt khi sử dụng khớp khi không chụp và khi chụp, bạn có thể sử dụng tệp thực thi mạnh hơn vì nó tốt cho việc chụp, nhưng nếu bạn đã sử dụng khớp khi chụp, hãy thấy rằng nó hiển thị ảnh chụp khi regex không toàn cục, nhưng không 'không hiển thị ảnh chụp khi regex là toàn cầu.
> "azb".match(/a(z)b/);
[ "azb", "z" ]
> "azb".match(/a(z)b/g);
[ "azb" ]
>
Một điều khác là nếu bạn sử dụng tệp thực thi, lưu ý rằng nó được gọi trên regex, sau đó nếu bạn sử dụng một biến cho regex, bạn có nhiều quyền lực hơn
Bạn không nhận được kết quả phù hợp khi bạn không sử dụng biến cho regex, vì vậy hãy sử dụng biến cho regex, khi sử dụng thi hành
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
>
> /[a-c]/g.exec("abc")
[ "a" ]
> /[a-c]/g.exec("abc")
[ "a" ]
>
> var r=/[a-c]/g
> r.exec("abc")
[ "a" ]
> r.exec("abc")
[ "b" ]
> r.exec("abc")
[ "c" ]
> r.exec("abc")
null
>
Và với hành động, bạn có thể nhận được "chỉ mục" của trận đấu
> var r=/T/g
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
2
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
6
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
9
> r.exec("qTqqqTqqTq");
null
> r.lastIndex
0
>
Vì vậy, nếu bạn muốn lập chỉ mục hoặc thu thập, thì hãy sử dụng tệp thực thi (lưu ý rằng như bạn có thể thấy, với "chỉ mục", "chỉ mục" mà nó đưa ra thực sự là lần xuất hiện thứ n, nó được tính từ 1. Vì vậy, bạn có thể tính chỉ mục bằng cách trừ đi 1. Và như bạn có thể thấy, nó cho 0 - lastIndex là 0 - không tìm thấy).
Và nếu bạn muốn kéo dài so khớp, bạn có thể sử dụng nó khi bạn đang chụp, nhưng không phải khi regex là toàn cục và khi bạn làm điều đó cho điều đó, thì nội dung của mảng không phải là tất cả các kết quả phù hợp, nhưng là toàn bộ trận đấu theo sau là chụp.
exec
để nhận được tất cả các lựa chọn phụ.