2013-05-06 37 views
9

Làm cách nào để tham gia một số biểu thức chính quy (javascript) thành một biểu thức duy nhất?Tham gia các cụm từ thông dụng

Ví dụ: được cung cấp [/^abcd$/,/^abxy$/,/^abz$/], đầu ra sẽ là /^ab(cd|xy|z)$/.

Tính năng này có khả thi về mặt tính toán không?

+2

Tham gia rất dễ dàng, chỉ cần hoặc ('|') các biểu thức khác nhau. Câu hỏi của bạn ngụ ý rằng bạn muốn công cụ cũng "đơn giản hóa" biểu thức. Làm thế nào để bạn đo độ phức tạp của một regexp? –

+2

"Công cụ" tôi đã sử dụng trong quá khứ là mô-đun Perl này http://search.cpan.org/~dankogai/Regexp-Optimizer-0.15/lib/Regexp/Optimizer.pm Chỉ cần tham gia với chúng như nhận xét ở trên cho biết , và sau đó chạy regex thông qua nó và nó sẽ được tối ưu hóa. –

+0

@cryptic ツ công cụ thử nghiệm thành công như thế nào? nếu một người hoài nghi về kết quả thì tôi sẽ tránh xa nó trừ khi bạn chỉ muốn học regex – gillyspy

Trả lời

4

Thật dễ dàng để tạo một công cụ như vậy cho các trường hợp đơn giản. Chỉ cần đặt mỗi mẫu vào các dấu ngoặc đơn và nối chúng với "|". Vì vậy, ví dụ bạn thiết lập các mô hình nó trở thành:

/(^abcd$)|(^abxy$)|(^abz$)/ 

Trên một ý nghĩ thứ hai, dấu ngoặc đơn có thể không cần thiết, vì vậy đây sẽ làm:

/^abcd$|^abxy$|^abz$/ 
+0

'/ ((?:^abcd $) | (?:^abxy $) | (?:^abz $)) /' có lẽ đây là giải pháp tốt hơn để nhóm nó trong 1 nhóm phù hợp? – HamZa

+0

Hỗ trợ JavaScript được hỗ trợ regexes (? :) sử dụng chúng thực sự tốt hơn. Tuy nhiên, tôi sẽ nói gói tất cả chúng trong một dấu ngoặc đơn là không cần thiết và sẽ giải quyết một vấn đề khác nhau chút. – spbnick

+0

có, điều đó sẽ thực hiện thủ thuật, nhưng không phải ở dạng ngắn nhất, tôi đoán tôi nên chính xác hơn - làm sao tôi có thể làm như vậy trong một, cho phép gọi nó là "dạng kinh điển", như trong ví dụ của tôi? – user1088045

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