2011-01-04 46 views
76

Có cách nào đơn giản để bỏ qua khoảng trắng trong chuỗi mục tiêu khi tìm kiếm các kết quả phù hợp sử dụng mẫu biểu thức chính quy không? Ví dụ: nếu tìm kiếm của tôi là "mèo", tôi muốn "c ats" hoặc "ca ts" để khớp. Tôi không thể loại bỏ khoảng trống trước bởi vì tôi cần tìm chỉ mục bắt đầu và kết thúc của trận đấu (bao gồm bất kỳ khoảng trắng nào) để làm nổi bật kết quả trùng khớp đó và bất kỳ khoảng trống nào cần phải có cho mục đích định dạng.Làm cách nào để bỏ qua khoảng trống trong chuỗi chủ đề biểu thức chính quy?

Trả lời

83

Bạn có thể gắn các ký tự khoảng trắng tùy chọn \s* ở giữa mọi ký tự khác trong regex của bạn. Mặc dù được cấp, nó sẽ có một chút dài dòng.

/cats/ ->/c\s*a\s*t\s*s/

+0

Cảm ơn, có vẻ như đó là cách để đi. Nhưng tôi chỉ nhận ra rằng tôi chỉ muốn các ký tự khoảng trống tùy chọn nếu chúng theo một dòng mới. Ví dụ: "c \ n ats" hoặc "ca \ n ts" phải khớp nhau. Nhưng sẽ không muốn "c ats" để phù hợp nếu không có dòng mới. Bất kỳ ý tưởng về cách đó có thể được thực hiện? – Steven

2

Bạn có thể đặt \s* Inbetween mỗi nhân vật trong chuỗi tìm kiếm của bạn vì vậy nếu bạn đang tìm kiếm con mèo bạn sẽ sử dụng c\s*a\s*t\s*s\s*s

Đó là dài nhưng bạn có thể xây dựng các chuỗi động của khóa học.

Bạn có thể nhìn thấy nó làm việc ở đây: http://www.rubular.com/r/zzWwvppSpE

3

Nếu bạn chỉ muốn cho phép không gian, sau đó

\bc *a *t *s\b 

nên làm điều đó. Để cũng cho phép các tab, sử dụng

\bc[ \t]*a[ \t]*t[ \t]*s\b 

Tháo \b neo nếu bạn cũng muốn tìm cats trong những từ như bobcats hoặc catsup.

6

Phát biểu bình luận Steven để trả lời Sam Dufel của

Cảm ơn, có vẻ như đó là con đường để đi. Nhưng tôi chỉ nhận ra rằng tôi chỉ muốn các ký tự khoảng trống tùy chọn nếu chúng theo một dòng mới. Ví dụ: "c \ n ats" hoặc "ca \ n ts" phải khớp nhau. Nhưng sẽ không muốn "c ats" để phù hợp nếu không có dòng mới. Bất kỳ ý tưởng về cách đó có thể được thực hiện?

này nên làm như lừa:

/c(?:\n\s*)?a(?:\n\s*)?t(?:\n\s*)?s/ 

Xem this page cho tất cả các biến thể khác nhau của 'mèo' rằng đây phù hợp.

Bạn cũng có thể giải quyết điều này bằng cách sử dụng conditionals, nhưng chúng không được hỗ trợ trong hương vị javascript của regex.

+2

Rất xấu xí. Phải có cách tốt hơn. –

+0

Bạn có thể làm cho nó dễ đọc hơn trong cú pháp JS (mặc dù kỹ thuật này sẽ hoạt động trong các ngôn ngữ khác) với: 'new RegExp ('cats'.split (' '). Join (' (?: \ N \ s *)? ')) ' – brianary

Các vấn đề liên quan