2009-12-04 57 views
8

Khi tôi tìm kiếm nội dung nào đó, tôi đã tìm thấy câu hỏi được trả lời trong trang web này. 2 câu trả lời chứa/([^.]*).(.*)/ có nghĩa là gì?

/([^.]*)\.(.*)/

về câu trả lời của họ. Câu hỏi đặt tại Find & replace jquery. Tôi là newbie trong javascript, vì vậy tôi tự hỏi, nó có nghĩa là gì? Cảm ơn.

+4

Tôi nghĩ rằng tôi đã thấy sự thô lỗ đó một lần trên một dải truyện tranh. Hoặc, nếu bạn thích, một cụm từ thông dụng được sử dụng để tìm kiếm và thay thế. – xpda

+1

@ xpda +1 để làm cho tôi cười vào sáng thứ Sáu – MrFidge

Trả lời

3

Biểu thức chính quy là tìm kiếm gần đúng chuỗi không chứa dấu chấm, sau đó là dấu chấm và sau đó là một chuỗi chứa bất kỳ ký tự nào.

8

Đó là số regular expression (số này không khớp với dấu chấm, theo sau là dấu chấm theo sau là bất kỳ thứ gì (nghĩ "tệp.ext")). Và bạn nên chạy, không đi bộ, để tìm hiểu về chúng. Giải thích cách biểu thức chính quy cụ thể này hoạt động sẽ không giúp bạn khi bạn cần bắt đầu đơn giản hơn. Vì vậy, hãy bắt đầu với số regex tutorial và nhận Mastering Regular Expressions.

+1

+1 để nói "tìm hiểu về regexes". –

+1

-1 không đề cập đến các nhóm, toàn bộ điểm của biểu thức này. – UncleO

+0

@uncleo: Tốt, nhưng đó không phải là vấn đề của câu hỏi của anh ấy. Anh thậm chí còn không nhận ra rằng đó là một biểu hiện bình thường để giải thích sự phức tạp của biểu hiện thông thường đặc biệt này sẽ không giúp anh nhiều. – jason

4

Mọi thứ ngoại trừ dấu chấm, sau đó là dấu chấm, sau đó là bất kỳ thứ gì.

Bạn có thể kiểm tra regex'es trên regexpal

2

Đó là một biểu hiện thường xuyên. Cụm từ thông dụng là các công cụ mạnh mẽ nếu bạn sử dụng chúng đúng cách.

Regex cụ thể đó trích xuất tên tệp và tiện ích mở rộng từ chuỗi có dạng "tệp.ext".

+0

hoặc '.textfile' (phần đầu tiên là tùy chọn) – Amarghosh

+1

Phần cuối cùng cũng là tùy chọn. '.' cũng sẽ khớp. Và '...........' sẽ khớp với '.' đầu tiên. – eyelidlessness

+0

hoặc 'Makefile' (phần mở rộng là tùy chọn) (nhưng regex sẽ không khớp) – Thanatos

2

Đó là cụm từ thông dụng chia tách một chuỗi thành hai phần: mọi thứ trước khoảng thời gian đầu tiên và sau đó là phần còn lại. Hầu hết các công cụ regex (bao gồm cả công cụ Javascript) cho phép bạn truy cập các phần đó của chuỗi riêng biệt (sử dụng $ 1 để tham khảo phần đầu tiên và $ 2 cho phần thứ hai).

27
/([^.]*)\.(.*)/ 

Hãy để chúng tôi phá hủy nó. Dấu gạch chéo đầu và cuối là dấu phân cách và đánh dấu sự bắt đầu và kết thúc của cụm từ thông dụng.

Sau đó, có một nhóm được tạo dấu ngoặc đơn: ([^.]*) Cha mẹ có chỉ để nhóm một chuỗi lại với nhau. Các dấu ngoặc vuông biểu thị một "nhóm ký tự", nghĩa là bất kỳ ký tự nào bên trong nhóm này đều được chấp nhận ở vị trí của nó. Tuy nhiên, nhóm này bị phủ nhận bởi ký tự đầu tiên là ^, ngược lại ý nghĩa của nó. Vì ký tự duy nhất bên cạnh phủ định là dấu chấm, nên ký tự này khớp với một ký tự đơn không phải là dấu chấm. Sau dấu ngoặc vuông là * (dấu hoa thị), có nghĩa là các dấu ngoặc vuông có thể được kết hợp bằng không hoặc nhiều lần.

Sau đó, chúng tôi truy cập vào \.. Đây là một khoảng thời gian thoát. Các khoảng thời gian trong các biểu thức chính quy có ý nghĩa đặc biệt (trừ khi thoát hoặc trong một nhóm ký tự). Điều này khớp với một khoảng thời gian chữ trong văn bản.

(.*) là nhóm phụ được thêm mới. Lần này, khoảng thời gian khớp với bất kỳ ký tự nào và dấu sao cho biết nó có thể được lặp lại nhiều lần tùy theo nhu cầu.

Tóm lại, biểu thức tìm thấy bất kỳ chuỗi ký tự nào (không phải là dấu chấm), theo sau là một dấu chấm, tiếp theo là ký tự bất kỳ.

Chỉnh sửa: Đã xóa một phần về rút ngắn, vì nó đánh bại mục đích giả định của cụm từ thông dụng.

+3

Hơn việc tăng khả năng đọc, loại thất bại này nhằm mục đích của regex. Khả năng trích xuất các phần của chuỗi trước và sau giai đoạn đầu tiên. –

+0

Tôi nhận ra điều này là cũ, nhưng có lẽ nên đề cập rằng các nhóm cũng có thể phù hợp với các nhân vật ZERO. I E. đối sánh hợp lệ là 'a.b', 'a.', '.b' và '.', với các nhóm là 'a' và 'b', 'a' và '', '' và 'b' và '' và '' tương ứng. – MattJenko

-2

.ký tự khớp với bất kỳ ký tự nào ngoại trừ ký tự ngắt dòng \ r hoặc \ n.

các^phủ nhận những gì sau đó (trong trường hợp này dot)

các * có nghĩa là "zero hoặc nhiều lần"

nhóm ngoặc đơn và chụp,

các \ cho phép bạn để phù hợp với một ký tự đặc biệt (như dấu chấm hoặc dấu sao)

vì vậy, ([^.]*) có nghĩa là bất kỳ ngắt dòng nào lặp lại không hoặc nhiều lần (nó chỉ ăn lên trả về vận chuyển).

(.*) phần này có nghĩa là bất kỳ chuỗi ký tự không hoặc nhiều lần (trừ các ngắt dòng)

\. nghĩa một dấu chấm thực

nên toàn bộ điều sẽ phù hợp với không hoặc ngắt dòng hơn tiếp theo một dấu chấm được theo sau bởi bất kỳ số ký tự nào.

Để biết thêm thông tin và tài liệu tham khảo thực sự tuyệt vời về Regular Expressions kiểm tra: http://www.regular-expressions.info/reference.html

+0

[^.] Khớp với bất kỳ thứ gì trừ ký tự dấu chấm '.' . – UncleO

+0

đây có phải là cú pháp JavaScript cụ thể không? Sự khác biệt giữa ^. và \. ? –

+1

@Joe Basirico: '\ .' khớp với dấu chấm,'^.' bên trong một lớp ký tự như thế này '[^.]' Khớp với bất kỳ thứ gì ** không ** là dấu chấm. –

1

Đây là một biểu hiện thường xuyên với một số sử dụng cao cấp.

Hãy xem xét một phiên bản đơn giản hơn: /[^.]*\..*/ giống như trên mà không có dấu ngoặc đơn. Điều này sẽ chỉ khớp với bất kỳ chuỗi nào có ít nhất một dấu chấm. Khi các dấu ngoặc đơn được thêm vào, và một sự trùng khớp xảy ra, các biến số \1\2 sẽ chứa các phần khớp từ các dấu ngoặc đơn. Người đầu tiên sẽ có bất cứ điều gì trước dấu chấm đầu tiên. Phần thứ hai sẽ có mọi thứ sau dấu chấm đầu tiên.

Ví dụ:

input: foo...bar 
\1: foo 
\2: ..bar 

input: .foobar 
\1: 
\2: foobar 
1

biểu thức chính quy này tạo ra hai biểu thức phù hợp có thể được lấy ra.

Hai phần là chuỗi trước dấu chấm đầu tiên (có thể trống) và chuỗi sau dấu chấm đầu tiên (có thể chứa dấu chấm khác).

Hạn chế duy nhất trên đầu vào là nó chứa ít nhất một dấu chấm. Nó sẽ khớp với "." trái ngược với một số câu trả lời khác, nhưng các nhóm được giải phóng sẽ trống.

0

Đó là cụm từ thông dụng, về cơ bản là một mẫu ký tự được sử dụng để mô tả một mẫu ký tự khác. Tôi đã từng sử dụng regexps để tìm một địa chỉ email bên trong một tập tin văn bản, và chúng có thể được sử dụng để tìm nhiều mẫu văn bản trong một văn bản lớn hơn với điều kiện bạn viết regexp đúng cách.

6

gốc: /([^.]*)\.(.*)/

Split này như:
[1] ([^.]*): Nó nói phù hợp với tất cả các nhân vật ngoại trừ . [ period ]
[2] \.: phù hợp với một giai đoạn
[3] (.*): phù hợp với bất kỳ ký tự

để nó trở thành [1] So khớp tất cả các ký tự không phải là . [ period ] [2] cho đến khi bạn tìm thấy .[ period ] thì [3] khớp với tất cả c haracters.