Tôi đã xem qua biểu thức chính quy này trong mã nguồn jQuery:Phần biểu thức chính quy này thêm gì?
...
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
...
tôi đã tự hỏi tại sao nó lại khá phức tạp. Tôi đặc biệt quan tâm đến lý do đằng sau phần thứ hai:
(?:.*? rv:([\w.]+))?
tôi đã làm một số nghiên cứu nhưng tôi không thể tìm ra những gì phần này của biểu thức chính quy cho biết thêm.
(?:) to match but not capture
.*? any amount of any character
rv: something literal
([\w.]+) one or more word characters or a dot
? appear 0 or 1 time
Đặc biệt, điều đó cuối cùng ?
không có ý nghĩa nhiều với tôi. Toàn bộ phần thứ hai phù hợp nếu có hoặc không phải là một chuỗi con như được xác định bởi phần thứ hai đó. Với một số thử nghiệm và sai sót, cụm từ thông dụng dường như không khác với chỉ:
/(mozilla)/
Ai đó có thể làm sáng tỏ phần thứ hai của cụm từ thông dụng phải làm gì? Nó hạn chế điều gì; chuỗi nào bị lỗi khi vượt qua /(mozilla)/
hoặc vòng khác?
tôi nghi ngờ nó để làm việc xung quanh một số trình duyệt Mozilla giả mạo bằng cách đặt nó trong chuỗi user-agent của họ. –
Bạn có thể cung cấp thêm một chút ngữ cảnh không? Đây có phải là một phần của một plugin jQuery không? Nếu vậy thì cái nào? Biết nơi mã này xuất hiện có thể làm sáng tỏ một số/lý do/tác giả muốn mẫu đặc biệt này, và do đó mô hình đang làm. – jefflunt
@Rafe Kettler: Tôi không chắc tôi hiểu chính xác bạn. Regexp thêm gì để ngăn chặn kẻ thù? – pimvdb